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

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

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

Чтобы ссылка на одну страницу перенаправляла на открытие другой, добавьте в файл .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](http://www.old-domain.ru) на [www.new-domain.ru](http://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](http://www.old-domain.ru) или old-domain.ru будет осуществлен переход на адрес [www.new-domain.ru](http://www.new-domain.ru).

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

Данное перенаправление также может быть выполнено двумя способами. В примерах осуществляется редирект с forum.example.ru на [www.forum.example.ru](http://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](http://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:&#x20;

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

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

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

Перенаправление на 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](http://httpd.apache.org/docs/current/).
