Переписывание на разных веб-серверах всегда является той соломинкой, которая ломает мне верблюжью спину.
Прямо сейчас у меня в конфигурации сервера есть следующее:
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
при использовании параметров.
Вы не можете этого сделать.
Часть URL-адреса, начинающаяся с #
, называется фрагментом. Он никогда не отправляется на веб-сервер. Когда браузер видит http://www.example.com/page#something
, он отправляет запрос на http://www.example.com/page
, а затем использует #something
для страницы, получаемой с сервера.
Если браузер отправляет запрос на http://www.example.com/page/#something
, он запрашивает http://www.example.com/page/
с сервера.
Итак, вам необходимо исправить пути в вашем приложении, чтобы не возникали проблемы, подобные описанным вами.