Редирект с помощью htaccess

Варианты реализации Редиректа с помощью файла .htaccess


Простой редирект:

Redirect 301 / http://www.domain.ru/
или

redirect /secret http://www.site.ru/nosecret
Ставится в файле .htaccess или httpd.conf для Apache. Первый "/" означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний "/"). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

Redirect 301 /old/old.htm http://www.domain.ru/new.htm где:
/old/old.htm - путь и имя старой страницы
http://www.domain.com/new.htm - новый путь и новое имя перемещенной страницы
Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).
Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php:

SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /user.php
Редирект при запросе определённых файлов. Если запрашиваются файлы, расширение которых не указано в файле .htaccess (gif и jpg), то следует перенаправление:

RewriteEngine On
RewriteRule !.(gif|jpg)$ index.php
Использование mod_rewrite:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain.ru
RewriteRule ^(.*)$ http://www.domain.ru/$1 [R=permanent,L]
Редирект с регулярным выражением:

RedirectMatch 301 (.*) http://www.domain.ru$1 Прописывается в файле .htaccess.
(.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/domain.ru. Однако, можно преобразовать страницы с использованием .html расширения к файлам того же самого названия, но с .php расширением:

RedirectMatch 301 (.*).html$ http://www.domain.ru$1.php
Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее:

RedirectMatch Permanent ^/html/resources.html$ http://www.domain.com/resources.php
RedirectMatch Permanent ^/html/other_page.html$ http://www.domain.com/other_page.php
RedirectMatch Permanent ^/(.*)$ http://www.domain.com/
"RedirectMatch Permanent" - это эквивалент "RedirectMatch 301", строка с "*(Wildcard)" должна быть последней в этом списке.

Создание удобо читаемых URL
Чтобы преобразовать, например, www.domain.ru/product.php?id=123 в www.domain.ru/product/123 следующим образом:

RewriteEngine on
RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L]
В следующем примере преобразуем www.domain.ru/script.php?product=123 в www.domain.ru/cat/product/123/:

RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2
Редирект на PHP:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.domain.ru/newdir/newpage.htm");
exit();
Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)

Редирект всех файлов в папке на один файл.
Например вы больше не нуждаетесь в разделе сайта Files и хотите перенаправить все запросы к папке /files на один файл /page.php. Для этого добавляем в .htaccess следующий код.

RewriteRule ^files(.*)$ /page.php [L,R=301]
Редирект всей папки кроме одного файла
В следующем примере все файлы из папки /files будут редиректится на на файл /page.php, кроме файла /files/test.html котоый должен редиректится на /test-1.html

RewriteRule ^files/test.html /test-1.html [L,R=301]
RewriteRule ^files(.*)$ /page.php [L,R=301]
Редирект динамического URL на новый файл.
Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл.

RewriteRule ^article.jsp?id=(.*)$ /test.htm [L,R=301]
То есть теперь, запрос к файлу вида http://www.domain.ru/article.jsp?id=8547 и/или http://www.domain.ru/article.jsp?id=1234 будет отправлен на файл http://www.domain.ru/test.htm.