Задать вопрос

Почему не корректно работает редирект в данном случае?

У нас перенос сайта с oldsite.ru на https://newsite.ru
Вот такой код прописал программист в htaccess:
Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php index.html
AddDefaultCharset UTF-8

#php_flag register_globals off
#php_value memory_limit 180M

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.oldsite.ru
RewriteRule ^(.*)$ http://oldsite.ru/$1 [R=301,L]
RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico|sitemap\.xml)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L,QSA]

#Domain redirect
RewriteCond %{HTTP_HOST} ^oldsite\.ru$ [NC]
#RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ https://newsite.ru/$1 [R=301,L]
#RewriteCond %{REQUEST_URI} ^[A-Z]{3,9}\ /index\.php\ HTTP/
#RewriteRule ^(.*)index\.php$ https://newsite.ru/$1 [R=301,L]
</IfModule>

В итоге редирект вроде работает, если заходить на главную страницу старого сайта, то редирект срабатывает нормально:
oldsite.ru на https://newsite.ru

Но если же вбить в строку любую другую страницу сайта, то выходит все время вот так:
oldsite.ru/kontakty переходит на https://newsite.ru/index.php/kontakty/

то есть в строке появляется "index.php".

Подскажите, как его убрать?
Если кстати дальше переходить на другие разделы сайта, то index.php из строки пропадает. А именно при редиректе он есть.
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@dodo512
Правила проверяются последовательно и https://newsite.ru/index.php/kontakty/ получается когда RewriteRule ^(.*)$ /index.php/$1 [L,QSA] срабатывает раньше чем
RewriteRule ^(.*)$ https://newsite.ru/$1 [R=301,L]
Исправить можно подняв повыше правило с редиректом.

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.|)oldsite\.ru$ [NC]
RewriteRule ^(.*)$ https://newsite.ru/$1 [R=301,L]

RewriteCond $1 !^(index\.php|uploads|robots\.txt|favicon\.ico|sitemap\.xml)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L,QSA]
Ответ написан
Ваш ответ на вопрос

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

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