Как исправить некорректный редирект с www?

Здравствуйте, уважаемые знатоки!

На сайте некорректно работает редирект на www. Например, с site.ru/razdel происходит перенаправление на http://www.site.ru, а /razdel/ куда-то теряется.

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

.htaccess:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

RewriteCond %{HTTP_HOST} ^site.ru [NC]
RewriteRule ^(.+[^/])$ http://www.site.ru/$1/ [QSA]
redirect 301 /index.php/ http://www.site.ru


PS: Правило с index.php стояло по умолчанию, без него почему-то cms не работает. Добавление слэша в конце ссылок необходимо. redirect 301 добавил, чтобы убрать www.site.ru/index.php/.
  • Вопрос задан
  • 3199 просмотров
Решения вопроса 1
nowm
@nowm
Вместо:
RewriteCond %{HTTP_HOST} ^site.ru [NC]
RewriteRule ^(.+[^/])$ http://www.site.ru/$1/ [QSA]
redirect 301 /index.php/ http://www.site.ru


Напишите:
RewriteCond %{HTTP_HOST} ^site.ru
RewriteRule (.*) http://www.site.ru/$1 [R=301,L]


Только писать это желательно не в конце файла, а на следующей строке после после «RewriteBase /».

Редирект у вас происходит из-за того, что строчкой «RewriteRule ^(.+[^/])$ www.site.ru/$1 [QSA]» вы указываете, что нужно по адресу без «www» показывать содержимое со страницы с «www». При этом, в этой строке речь не идёт вообще о редиректе, так как указан флаг «QSA», а не «R». А раз в этой строке ещё и нет дополнительного флага «L», выполнение не прекращается и начинает работать инструкция «redirect 301 /index.php/ http://www.site.ru», которая редиректит запрос в корень сайта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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