Не работает редирект 301 в файле htaccess. Интересная причина

0
197
Редирект 301 в файле htaccess

Ковырялся как-то вечером на одном из своих проектов, надо было настроить в файле htaccess редирект 301 с нескольких старых страниц с одного домена на другой. И столкнулся с неожиданной проблемой.

Редирект не срабатывал, и всё тут. Никак. Всё перепробовал.

Казалось бы, обычная конструкция в файле htaccess, ничего такого. Например, со старой страницы httр://oldsite.ru/entry.php?b=5 на httр://newsite.ru/blabla.html она бы выглядела так:

Redirect 301 /entry.php?b=5 httр://newsite.ru/blabla.html

Мозг вынес, но гугл в помощь. Как оказалось, вся причина в знаке вопроса (?) в URL старой страницы. В этом самом entry.php?b=5. Оказывается, что не все сервера (вообще многие) не отрабатывают такую команду, если в URL старой страницы есть знак вопроса. Так что, часто вся проблема именно в этом.

Решение оказалось следующее. Вместо обычной вышеуказанной одной строчки в файле htaccess пишем две другие для каждой страницы отдельно:

RewriteCond %{QUERY_STRING} ^b=5$
RewriteRule ^entry.php$ httр://newsite.ru/blabla.html? [R=301,L]

После этого редирект 301 заработал как по нотам.

Вы спросите, а причем тут пример с файлом страницы из Vbulletin (/entry.php?b=5), ведь речь должна идти о WordPress? Так я напоминаю, что и в WordPress, если вы не используете ЧПУ, постоянные ссылки также имеют знак вопроса в своем URL (например /?p=123).

Надеюсь, что решение этого вопроса также поможет какому-нибудь самоучке, как и я.



Оставить комментарий

Please enter your comment!
Please enter your name here