@lexstile

Как сделать редирект со слеша на без слеша весь сайт?

Я пробую так:
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

Выходит только для существующих в базе страниц, то есть, у меня единая точка входа и все страницы тянуться из базы (с ними работает).
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php

Но, сейчас создал физическую папку, в нем разместил index.php - выходит циклический редирект:

Сайт site.ru выполнил переадресацию слишком много раз.
Удалите файлы cookie..
ERR_TOO_MANY_REDIRECTS

Пробовал сделать редирект наоборот - на слеш(все работает):
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

В чем может быть причина?
  • Вопрос задан
  • 741 просмотр
Решения вопроса 1
@dodo512
создал физическую папку, в нем разместил index.php - выходит циклический редирект

Обычно по умолчанию включён DirectorySlash и для существующих папок mod_dir делает редирект с добавлением слеша.
Исключить зацикливание можно так:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

Или добавить DirectorySlash Off, но тогда нужны дополнительные правила, чтобы при обращении к существующей папке работал размещённый в ней index.php.

Или не заморачиваться и оставить адреса со слешем.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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