Если Вы владелец какого либо интернет ресурса то наверняка знаете что в большинстве случаев для Вашего сайта нужно прописывать в файле .htaccess который находится в корневой папке сайта на сервере несколько директив (редиректов/перенаправлений) что бы избежать дублирования контента. Это необходимо что бы робот поисковой системы, который заходит на Ваш сайт понимал какой адрес Вашего сайта необходимо считать приоритетным с WWW или без WWW с протоколом HTTP или HTTPS и так далее. А так же для того что бы перенаправить посетителя на новый домен со старого (если Вы сменили адрес сайта) или на нужную Вам страницу.
В этом руководстве я напишу несколько стандартных редиректов для Вашего сайта, а точнее для файла .htaccess в котором нужно прописать эти перенаправления. Эти директивы подходят только для виртуального хостинга, если у Вас виртуальный сервер VPS/VDS то эти директивы Вам не подойдут. Для настройки переадресаций на VPS/VDS воспользуйтесь этим руководством.
И не забывайте при использовании ниже указанных директив в Вашем файле .htaccess заменять название сайта (его адрес) на Ваш адрес.
Редиректы:
Чтобы ссылка на одну страницу перенаправляла на открытие другой, добавьте в файл .htaccess следующую строку:
Redirect 301 / http://example.com/index.html
В предложенном варианте:
Redirect 301 - инструкция, сообщающая, что страница перемещена постоянно;
http://example.com/index.html - адрес страницы, на которую происходит перенаправление.
Аналогичный синтаксис простого редиректа в другом примере:
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 [R=301,L]
Перенаправление с несуществующего файла filename.jpg на необходимый статический файл (предварительно нужно переименовать filename.jpg - например, в filename.jpg2):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.ru$
RewriteCond %{REQUEST_URI} ^/filename.jpg$
RewriteRule ^(.*)$ /directory/filename.jpg2 [R=301,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]