Не работает редирект 301 в файле htaccess. Интересная причина.
Ковырялся вечером на одном из своих проектов, надо было настроить в файле htaccess редирект с нескольких старых страниц с одного домена на другой. И столкнулся с неожиданной проблемой. Редирект не срабатывал, и всё тут. Никак. Всё перепробовал.
Казалось бы, обычная конструкция в файле htaccess, ничего такого. Например, со старой страницы http://oldsite.ru/entry.php?b=5 на http://newsite.ru/blabla.html она бы выглядела так:
Redirect 301 /entry.php?b=5 http://newsite.ru/blabla.html
Мозг вынес, но гугл в помощь. Как оказалось, вся причина в знаке вопроса в URL старой страницы. В этом самом entry.php?b=5. Не все сервера, да почти все не отрабатывают такую команду, если в URL старой страницы есть такой знак. Так что, вся проблема со знаком вопроса в урле.
Решение оказалось следующим. Вместо обычной вышеуказанной одной строчки в файле htaccess пишем две другие для каждой страницы отдельно.
RewriteCond %{QUERY_STRING} ^b=5$
RewriteRule ^entry.php$ http://newsite.ru/blabla.html? [R=301,L]
И всё заработало как по нотам.
Надеюсь, это решение также поможет какому-нибудь самоучке, как я. А за подсказку спасибо Евгению Фадееву!
http://izgoba.com/11510.html