nginx перезаписывает с завершающей косой чертой, а затем применяет другие правила

Переписывание на разных веб-серверах всегда является той соломинкой, которая ломает мне верблюжью спину.

Прямо сейчас у меня в конфигурации сервера есть следующее:

rewrite ^/(.+)$ /index.php?/$1 last;

Теперь мне нужно убедитесь, что любой URL-адрес, который я открываю на сервере, должен иметь конечный / . Но если URL-адрес имеет параметры, завершающие / должны быть проигнорированы.

URL-адрес может выглядеть так:

http://domain.tld/testing/           // is okay
http://domain.tld/testing            // should be redirected with trailing slash
http://domain.tld/testing#param      // should be left alone

Я пробовал следующее:

rewrite ^([^.\#]*[^/])$ /$1/ permanent;
rewrite ^/(.+)$ /index.php?/$1 last;

Но что он делает, он оставляет в покое URL-адрес с завершающей косой чертой, но если URL-адрес не имеет его, он перенаправляет на http: //domain.tld/index.php//testing/ или даже на http: / /domain.tld/index.php//testing/#param при использовании параметров.

0
задан 2 February 2017 в 17:48
1 ответ

Вы не можете этого сделать.

Часть URL-адреса, начинающаяся с # , называется фрагментом. Он никогда не отправляется на веб-сервер. Когда браузер видит http://www.example.com/page#something , он отправляет запрос на http://www.example.com/page , а затем использует #something для страницы, получаемой с сервера.

Если браузер отправляет запрос на http://www.example.com/page/#something , он запрашивает http://www.example.com/page/ с сервера.

Итак, вам необходимо исправить пути в вашем приложении, чтобы не возникали проблемы, подобные описанным вами.

1
ответ дан 4 December 2019 в 16:22

Теги

Похожие вопросы