Несколько слов о Redirect
30.08.2013
Как тривиально звучать задача «сделать редирект на сайте», но довольно часто к ней добавляются еще дополнительные задачи.
Пример первый:
Задача: нужно сделать редирект со всех файлов, кроме определенных, на другой сайт.Эту задачу решил удалением всех файлов, кроме нужных, со старого сайта и таким кодом в htaccess :
1 |
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*) http://NEW_SITE.ru/$1 [R=301,L] |
Осложнение: На хостинге infobox возникла ошибка «403-forbidden» из-за отсутствия индексного файла в директории. Пришлось создать index.php содержащий:
1 |
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location: http://NEW_SITE.ru/"); exit(); ?> |
Пример второй:
Задача: Нужно сделать редиректы с двух страниц на другой сайт.1 |
RewriteEngine On RewriteRule ^.*model1.html$ http://www.site.ru/model_1.php [L,R=301] RewriteRule ^.*production/models/p1.html$ http://www.site.ru/shop/all.html [L,R=301] |
Пример третий:
Использование переадресация с передачей параметров:
1 |
RewriteEngine On RewriteRule ^akcii/(.*) /test.php?url=$1 [L] |
Важно::
Не нужно начинать эти правила со слэша. Т.е. вариант "^.*/model1.html$" не работает.
Пример четвертый
Часто нужно работать с адресами, отличающимися только параметрами.
Задача: Сделать 301 редирест с http://oddler.ru/index.php?categoryID=11 на http://www.oddler.ru/new-razdel_name.html
1 |
RewriteCond %{QUERY_STRING} ^categoryID=11$ RewriteRule (.*) http://www.oddler.ru/new-razdel_name.html? [L,R=301] |