Найти в Дзене
MATRIX

Редиректы .htaccess для сайта расположенном на виртуальном хостинге

Если Вы владелец какого либо интернет ресурса то наверняка знаете что в большинстве случаев для Вашего сайта нужно прописывать в файле .htaccess который находится в корневой папке сайта на сервере несколько директив (редиректов/перенаправлений) что бы избежать дублирования контента. Это необходимо что бы робот поисковой системы, который заходит на Ваш сайт понимал какой адрес Вашего сайта является
Оглавление
Файл .htaccess
Файл .htaccess

Если Вы владелец какого либо интернет ресурса то наверняка знаете что в большинстве случаев для Вашего сайта нужно прописывать в файле .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]

Источник