Типовые перенаправления
Перенаправление (также используются названия редирект, переадресация, форвардинг) — это способ сделать один и тот же документ доступным с других адресов.
Вы можете настроить перенаправление с помощью файла .htaccess по предложенным ниже примерам. Обратите внимание, что кириллические домены в директивах необходимо указывать в punycode.
- Простое перенаправление
- Перенаправление с использованием mod_rewrite
- Перенаправление на другой домен
- Перенаправление домена без www на домен с www
- Перенаправление домена с www на домен без www
- Перенаправление в подкаталог
- Перенаправление с несуществующего файла
- Перенаправление c http на https
- Перенаправление с https на http
- Перенаправление на http для одной страницы
- Перенаправление на https для одной страницы
Простое перенаправление
Чтобы ссылка на одну страницу перенаправляла на открытие другой, добавьте в файл .htaccess следующую строку:
Redirect 301 / http://example.com/index.html
В предложенном варианте:
- Redirect 301 — инструкция, сообщающая, что страница перемещена постоянно;
- http://example.com/index.html — адрес страницы, на которую происходит перенаправление.
При использовании 301 редиректа рейтинг сайта в поисковых системах сохраняется.
Аналогичный синтаксис простого редиректа в другом примере:
Redirect permanent / http://example.com/index.html
Перенаправление с использованием mod_rewrite
Перенаправление на другой домен
В примере ниже выполняется редирект с www.old-domain.ru на www.new-domain.ru:
RewriteEngine on
RewriteCond %{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 +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://www.forum.example.ru/$1 [R=301,L]
</IfModule>
Способ 2 (в данном способе нет необходимости указания домена).
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{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 +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]
</IfModule>
Способ 2.
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ http://forum.example.ru/$1 [R=301,L]
</IfModule>
Перенаправление в подкаталог
Перенаправление поддомена forum.example.ru в подкаталог forum:
Способ 1.
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/forum
RewriteCond %{HTTP_HOST} ^forum.example.ru$ [NC]
RewriteRule ^index\.php(.*)$ /forum/$1 [L,QSA]
Способ 2.
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$
RewriteCond %{REQUEST_URI} !/forum/
RewriteRule ^(.*)$ /forum/$1 [L]
Перенаправление поддомена www.forum.example.ru в подкаталог forum:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?forum\.example\.ru$
RewriteCond %{REQUEST_URI} !/forum/
RewriteRule ^(.*)$ /forum/$1 [L]
Перенаправление с несуществующего файла
Такие перенаправления могут быть полезны, когда необходимо, чтобы тот или иной статический файл (.txt, .jpg, .pdf и многие другие расширения) обрабатывался Apache вместо Nginx.
Перенаправление на PHP-скрипт при обращении к несуществующему файлу robots.txt:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.ru$
RewriteCond %{REQUEST_URI} ^/robots.txt$
RewriteRule ^(.*)$ /forum/script.php [PT,L]
Перенаправление с несуществующего файла filename.jpg на необходимый статический файл (предварительно нужно переименовать filename.jpg — например, в filename.jpg2):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.ru$
RewriteCond %{REQUEST_URI} ^/filename.jpg$
RewriteRule ^(.*)$ /directory/filename.jpg2 [PT,L]
Перенаправление c http на https
Вариант 1 (без дополнительных условий).
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Вариант 2 (перенаправление с http://example.ru на https://example.ru).
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{HTTP_HOST} ^example\.ru$
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]
Вариант 3 (перенаправление с http://example.ru на https://example.ru с отключением перенаправления для robots.txt).
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]
Вариант 4 (перенаправление с http://example.ru на https://www.example.ru).
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{HTTP_HOST} ^example\.ru$
RewriteRule ^(.*)$ https://www.example.ru/$1 [R=301,L]
Вариант 5 (перенаправление с http://www.forum.example.ru на https://forum.example.ru).
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Вариант 6 (перенаправление с http://forum.example.ru на https://www.forum.example.ru).
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^forum\.example\.ru$ [NC]
RewriteRule ^(.*)$ https://www.forum.example.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Перенаправление с https на http
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} 1 [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Перенаправление на http для одной страницы
Вариант 1.
RewriteEngine On
RewriteBase /
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 On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{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 On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Перенаправление на https для одной страницы
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{REQUEST_URI} ^/Необходимая директория_страница$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Более подробную информацию о перенаправлениях вы можете получить из официальной документации Apache.