Вчера столкнулся с проблемой - сделать редирект на URL, в котором удалена часть пути. Т.к. необходимость в написании редиректов, ранее не возникала, мой опыт состоял из 3 самых банальных правил:
- перенаправление на домен без www
- перенаправление со старого домена на новый
- перенаправление для RSS на FeedBurner
Итак, начнем...
Исходный URL: http://example.com/ru/title
Целевой URL: http://example.com/title
Задачка показалась очень похожей на правило №1 из моего большого опыта и я накидал вот такое правило:
RewriteCond %{REQUEST_URI} ^ru/(.*)$ [NC]<br /> RewriteRule ^ru/(.*)$ http://example.com/$1 [L,R=301]
Как и ожидалось, этот гусь не взлетел. Добавил в регэксп лидирующие слэши:
RewriteCond %{REQUEST_URI} ^/ru/(.*)$ [NC]<br /> RewriteRule ^/ru/(.*)$ http://example.com/$1 [L,R=301]
... и этот гусь остался там же.
Не буду долго мучать историей с курением документации, поиском в гуглах и яндексах. Может где-то и не дочитал, все-таки дело было почти ночью. 🙂
Утро вечера мудренее
©русская народная пословица
Сегодня утром, буквально через 5 минут, все заколосилось:
RewriteCond %{REQUEST_URI} ^/ru/(.*)$ [NC] RewriteRule ^ru/(.*)$ http://example.com/$1 [L,R=301]
лидирующий слэш нужен только в регэкспе RewriteCond, а в RewriteRule он не нужен.
p.s. В принципе можно обойтись и одним RewriteRule, но насколько это правильно я не знаю (надо будет полистать доку).
Спасибо!