Tuesday, March 19, 2013

301 Редирект для ссылки с недопустимыми символами средствами .htaccess



Нужно перенаправить испорченную CodeIgniter ссылку с символами %C2%A0 на другой адрес через .htaccess

Для примера
http://mysite.com/some-page%C2%A0
нужно
http://mysite.com/other-page


Redirect   301    /some-page%C2%A0     /other-page   не сработал

Сдесь я нашел некий пример

RewriteCond   %{THE_REQUEST}   ^[A-Z]+\ /[^%?\ ]*\%
RewriteRule    ^. http://www.example.com/     [R=301,L]

Правило редиректит все ссылки с спес символами %..

Я попробовал следующее:

RewriteCond   %{THE_REQUEST}   some-page[^%?\ ]*\%
RewriteRule   ^.    /other-page [R=301,L]

Но при тесте, мне в новую ссылку началась добавляться старая ссылка как параметр, причем многократно, так как правило начало работать рекурсивно (потому что some-page опять встречался в новой ссылке ну уже как параметр, пресечь это не удалось):

http://mysite.com/index.php/other-page?/some-page/&... etc

После гуглинга я нашел это

и сменил чуть правило

RewriteRule   ^.   /other-page [R=301,L]
to
RewriteRule   .?   /other-page$1? [R=301,L]


Итак, чтобы сделать 301 редирект битой ссылки с спец символами % нужно примерно такое:

RewriteCond   %{THE_REQUEST}   some-page[^%?\ ]*\%
RewriteRule   .?  /other-page$1? [R=301,L]