Несколько слов о Redirect

30.08.2013
Как тривиально звучать задача «сделать редирект на сайте», но довольно часто к ней добавляются еще дополнительные задачи.

Пример первый:

Задача: нужно сделать редирект со всех файлов, кроме определенных, на другой сайт.
Эту задачу решил удалением всех файлов, кроме нужных, со старого сайта и таким кодом в htaccess :
1
2
3
4
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
2
3
4
5
<?php
  header("HTTP/1.1 301 Moved Permanently");
  header("Location: http://NEW_SITE.ru/");
  exit();
?>

Пример второй:

Задача: Нужно сделать редиректы с двух страниц на другой сайт.
1
2
3
4
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
2
3
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
2
RewriteCond %{QUERY_STRING} ^categoryID=11$
RewriteRule (.*) http://www.oddler.ru/new-razdel_name.html?  [L,R=301]


Категории: Apache
Яндекс.Метрика