@mega-sinyak

Как довести штекер до ума?

Имеется штекер:
/.htaccess
RewriteEngine on

RewriteCond %{HTTPS}_%{HTTP_HOST} ^(?|off_(?:www\.)?(.*)|on_www\.(.*)) [NC]
RewriteRule .* https://%1/$0 [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-d
RewriteRule .* /public/index.php?$0 [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule .* /public/$0 [L]

Суть его - убрать возможность дубля по адресам примерно такого вида:
1. site/controller
2. site/public/controller
То есть во втором случае с public, мы не имеем доступа к controller, так как контроллером становится public :)

Что не устраивает?

При вводе адреса site/publiс/ всё нормально, при вводе site/public как видим БЕЗ слеша, то адрес дописывается и принимает следующий вид site/public/?public.

Я не использую явные GET-параметры, поэтому думаю отрежу-ка я QUERY_STRING, переписал вот это строчку RewriteRule .* /public/index.php?$0 [L] на RewriteRule .* /public/index.php [L], трабла с ?public исчезла, но теперь при вводе без слеша или со слешем всегда имеем site/publiс/, то есть последний слеш появляется всегда.

Как убрать появление слеша в конце, ЕСЛИ ВВЁЛ АДРЕС БЕЗ ПОСЛЕДНЕГО СЛЕША?

p.s. последний слеш появляется всегда, ТОЛЬКО ПРИ АДРЕСЕ /site/public, других адресов не касается.
  • Вопрос задан
  • 33 просмотра
Решения вопроса 1
@mega-sinyak Автор вопроса
DirectorySlash off

RewriteEngine on

RewriteCond %{HTTPS}_%{HTTP_HOST} ^(?|off_(?:www\.)?(.*)|on_www\.(.*)) [NC]
RewriteRule .* https://%1/$0 [R=301,L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-f
RewriteCond %{DOCUMENT_ROOT}/public/$0 !-d
RewriteRule .* /public/index.php [L]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule .* /public/$0 [L]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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