Типовые перенаправления

Перенаправление (также используются названия редирект, переадресация, форвардинг) - это способ сделать один и тот же документ доступным с других адресов.

Простое перенаправление

Чтобы ссылка на одну страницу перенаправляла на открытие другой, добавьте в файл .htaccess следующую строку:

Redirect 301 / http://example.com/index.html

В предложенном варианте:

  • Redirect 301 - инструкция, сообщающая, что страница перемещена постоянно;

  • http://example.com/index.html - адрес страницы, на которую происходит перенаправление.

При использовании 301 редиректа рейтинг сайта в поисковых системах сохраняется.

Аналогичный синтаксис простого редиректа в другом примере:

Redirect permanent / http://example.com/index.html

Перенаправление на другой домен

В примере ниже выполняется редирект с www.old-domain.ru на www.new-domain.ru:

RewriteEngine onRewriteCond %{HTTP_HOST} ^(www\.)?old-domain\.ru$RewriteRule ^(.*)$ http://www.new-domain.ru/$1 [R=301,L]

RewriteCond задает условие, при котором происходит выполнение правила, указанного в RewriteRule. Таким образом, при запросе любой страницы www.old-domain.ru или old-domain.ru будет осуществлен переход на адрес www.new-domain.ru.

Перенаправление домена без www на домен с www

Данное перенаправление также может быть выполнено двумя способами. В примерах осуществляется редирект с forum.example.ru на www.forum.example.ru.

Способ 1.

<IfModule mod_rewrite.c>Options +FollowSymLinksRewriteEngine OnRewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC]RewriteRule ^(.*)$ http://www.forum.example.ru/$1 [R=301,L]</IfModule>

Способ 2 (в данном способе нет необходимости указания домена).

<IfModule mod_rewrite.c>Options +FollowSymLinksRewriteEngine OnRewriteCond %{HTTP_HOST} !^www\.(.*) [NC]RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]</IfModule>

Перенаправление домена с www на домен без www

В примерах осуществляется перенаправление с www.forum.example.ru на forum.example.ru.

Способ 1.

<IfModule mod_rewrite.c>Options +FollowSymLinksRewriteEngine onRewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC]RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]</IfModule>

Способ 2.

<IfModule mod_rewrite.c>Options +FollowSymLinksRewriteEngine onRewriteCond %{HTTP_HOST} !^forum\.example\.ru$ [NC]RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]</IfModule>

Перенаправление в подкаталог

Перенаправление поддомена forum.example.ru в подкаталог forum:

# Способ 1: RewriteEngine onRewriteBase /RewriteCond %{REQUEST_URI} !^/forumRewriteCond %{HTTP_HOST} ^forum.example.ru$ [NC]RewriteRule ^index\.php(.*)$ /forum/$1 [L,QSA] # Способ 2: RewriteEngine onRewriteBase / RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ RewriteCond %{REQUEST_URI} !/forum/ RewriteRule ^(.*)$ /forum/$1 [L]

Перенаправление поддомена www.forum.example.ru в подкаталог forum:

RewriteEngine onRewriteBase /RewriteCond %{HTTP_HOST} ^(www\.)?forum\.example\.ru$RewriteCond %{REQUEST_URI} !/forum/RewriteRule ^(.*)$ /forum/$1 [L]

Перенаправление с несуществующего файла

Такие перенаправления могут быть полезны, когда необходимо, чтобы тот или иной статический файл (.txt, .jpg, .pdf и многие другие расширения) обрабатывался Apache вместо Nginx.

Перенаправление на PHP-скрипт при обращении к несуществующему файлу robots.txt:

RewriteEngine onRewriteCond %{HTTP_HOST} ^(www\.)?example\.ru$RewriteCond %{REQUEST_URI} ^/robots.txt$RewriteRule ^(.*)$ /forum/script.php [R=301,L]

Перенаправление с несуществующего файла filename.jpg на необходимый статический файл (предварительно нужно переименовать filename.jpg - например, в filename.jpg2):

RewriteEngine onRewriteCond %{HTTP_HOST} ^(www\.)?example\.ru$RewriteCond %{REQUEST_URI} ^/filename.jpg$RewriteRule ^(.*)$ /directory/filename.jpg2 [R=301,L]

Перенаправление c http на https

Вариант 1 (без дополнительных условий).

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Вариант 2 (перенаправление с http://example.ru на https://example.ru).

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteCond %{HTTP_HOST} ^example\.ru$RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]

Вариант 3 (перенаправление с http://example.ru на https://example.ru с отключением перенаправления для robots.txt).

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteCond %{REQUEST_URI} !robots.txtRewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]

Вариант 4 (перенаправление с http://example.ru на https://www.example.ru).

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteCond %{HTTP_HOST} ^example\.ru$RewriteRule ^(.*)$ https://www.example.ru/$1 [R=301,L]

Вариант 5 (перенаправление с http://www.forum.example.ru на https://forum.example.ru).

Options +FollowSymLinksRewriteEngine OnRewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC]RewriteRule ^(.*)$ https://forum.example.ru/$1 [R=301,L]RewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Вариант 6 (перенаправление с http://forum.example.ru на https://www.forum.example.ru).

Options +FollowSymLinksRewriteEngine OnRewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC]RewriteRule ^(.*)$ https://www.forum.example.ru/$1 [R=301,L]RewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Перенаправление с https на http

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} 1 [NC]RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Перенаправление на http для одной страницы

Вариант 1.

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} 1 [NC]RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Вариант 2 (общее перенаправление на https, с перенаправлением одной страницы на http). Этот способ часто необходим для CMS Bitrix и корректной работы обмена данными с 1С, т.к. 1C не может подключаться по протоколу https.

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteCond %{REQUEST_URI} !^/Необходимая директория_страница$RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]RewriteCond %{HTTP:X-HTTPS} 1 [NC]RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Отключение перенаправления на https для страницы bitrix/admin/1c_exchange.php для корректной работы обмена данных с 1C:

RewriteEngine OnRewriteCond %{HTTPS} offRewriteCond %{HTTP:X-Forwarded-Proto} !httpsRewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$ [NC]RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Перенаправление на https для одной страницы

RewriteEngine OnRewriteBase /RewriteCond %{HTTP:X-HTTPS} !1RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Более подробную информацию о перенаправлениях вы можете получить из официальной документации Apache.

Last updated