Редирект (перенаправление или форвардинг) —позволяет автоматически переадресовать пользователя, посетившего страницу А на страницу Б. Например, пользователь, пытающийся открыть страницу site.ru/page1/ будет попадать на site.ru/page2.
Как сделать редирект через файл htaccess
Для того, чтобы перенаправить пользователя с одной страницы на другую требуется использовать следующую комбинацию:
Redirect 301 site.ru/page1/ site.ru/page2/
Где:
- page1- страница которая будет переадресовывать;
- page2 – открывающийся документ.
Важно! Можно записывать адреса в относительном виде, например, /page1/ и /page2/.
Также допускается использование конструкции:
Redirect permanent site.ru/page1/ site.ru/page2/
Для того, чтобы выполнить правило, потребуется посетить административную панель хостинга (или же зайти через FTP), где в корневой папке сайта лежит файл htaccess.
Вводим нужное нам правило.
Как проверить работу 301 редиректа?
Для этого можно использовать инструмент проверки ответа сервера Яндекса:
Здесь вводим адрес первой страницы и видим следующее:
Как видим правило применилось и работает корректно.
Как сделать перенаправление на другой домен?
В этом случае необходимо автоматически перекидывать всех пользователей с домена domain1.ru на domain2.ru при помощи функции:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.ru$
RewriteRule ^(.*)$ http://www.domain2/$1 [R=301,L]
Переадресация с http на https
При переезде сайта с http на https (установка SSL-сертификата) потребуется код, который не требует дополнительных модификаций:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Второй метод осуществляет перенос с http://domain.ru на https://domain.ru:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{HTTP_HOST} ^domain\.ru$
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
Третий способ выполняет аналогичную функцию, но отключает перенаправление для robots.txt:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://domain.ru/$1 [R=301,L]
В 4-й версии конечным пунктом для пользователя станет https://www.domain.ru:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteCond %{HTTP_HOST} ^domain\.ru$
RewriteRule ^(.*)$ https://www.domain.ru/$1 [R=301,L]
Позволяет сделать форвардинг с http://www.poddomen.domain.ru на https://poddomen.domain.ru:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ https://poddomen.domain.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Последняя версия, дающая возможность сделать связь между http://poddomen.domain.ru на https://www.poddomen.domain.ru:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ https://www.poddomain.domain.ru/$1 [R=301,L]
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
301 редирект с домена без WWW на с WWW
В функции ниже осуществляется переход из www.poddomen.domain.ru на poddomen.domain.ru:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://poddomen.domain.ru/$1 [R=301,L]
</IfModule>
Если же первый способ не помог можно использовать данную версию:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://poddomen.domain.ru/$1 [R=301,L]
</IfModule>
С www на без WWW
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://www.poddomen.domain.ru/$1 [R=301,L]
</IfModule>
Также имеется второй метод не требующий ввода доменного имени:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
C https на http
При необходимости сделать обратную интеграцию и перейти на незащищенную версию протокола можно воспользоваться:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} 1 [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
301 редирект на http для одной страницы
В этой ситуации подойдет:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} 1 [NC]
RewriteCond %{REQUEST_URI} ^/нужная-страница$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Второй метод осуществляет общий переезд на защищенный протокол (https), но одна страница останется на старом протоколе (http). Этот способ подойдет для интеграции 1С Bitrix с 1С Предприятие, так как система не может работать с защищенным протоколом:
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]
Для готовой интеграции с 1С-Битрикс, формула позволяющая исключить директорию bitrix/admin/1c_exchange.php из общего правила:
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]
С несуществующего файла
В этом случае можно будет применить:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?domain.ru$
RewriteCond %{REQUEST_URI} ^/robots.txt$
RewriteRule ^(.*)$ /poddomen/script.php [R=301,L]
Также подойдет второй способ:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^poddomen\.domain\.ru$ [NC]
RewriteRule ^(.*)$ http://poddomen.domain.ru/$1 [R=301,L]
Перенаправление на подкаталог
В этом случае возможно пербрасывать пользователей с poddomen.domain.ru на подкаталог poddomen.
Способ 1:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/poddomen
RewriteCond %{HTTP_HOST} ^poddomen.domain.ru$ [NC]
RewriteRule ^index.php(.*)$ /poddomen/$1 [L,QSA]
Способ 2:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^poddomen.domain.ru$
RewriteCond %{REQUEST_URI} !/poddomen/
RewriteRule ^(.*)$ /poddomen/$1 [L]
В случае, когда речь идет о www.poddomen.doamin.ru необходимо применить:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?poddomen\.domain\.ru$
RewriteCond %{REQUEST_URI} !/poddomen/
RewriteRule ^(.*)$ /poddomen/$1 [L]
С любой страницы на главную
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ index.php [L,QSA]
С поддомена на основной домен
Если требуется выполнить условие для всех поддоменов без исключения:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.+).domain.ru$
RewriteRule (.*) http://site.ru/$1?region=%1 [L,R=301,QSA]
Когда речь идет о конкретном поддомене следует использовать:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^poddomen.domain.ru$ [NC]
RewriteRule (.*) http://site.ru/$1?region=poddomen [L,R=301,QSA]
Подписывайтесь на наш канал в Яндекс.Дзен
Подписывайтесь на наш Telegram-канал
Подписывайтесь на наш Youtube-канал
Подписывайтесь на нашу группу ВКонтакте