Редирект через .htaccess

Редирект можно настроить разными способами: в панели управления хостингом, через код HTML, через PHP, с помощью web.config, через .htaccess, а также другими способами. Рассмотрим, в чём особенность редиректа через .htaccess и как настроить 301-й .htaccess-редирект с одной страницы на другую, а также Bitrix redirect.

В каких случаях подойдет .htaccess-редирект

Чтобы понять, для каких целей лучше подходит .htaccess-редирект, разберёмся, что такое .htaccess.

.htaccess — этот системный файл, который принадлежит корневой структуре сайта. В отличие от главного конфигурационного файла, который позволяет выполнять настройку веб-сервера в целом, .htaccess даёт возможность изменять настройки для отдельно взятых папок и пользователей.

Файл .htaccess позволяет вариативно настроить сайт. Действие команд из .htaccess распространяется на папки и подкаталоги, расположенные в одной директории с этим файлом. Если для какой-либо вложенной директории нужны иные инструкции, в ней также можно создать .htaccess. Если .htaccess расположен в корневой директории сервера, его действие распространяется на весь сервер, кроме тех директорий, где находится другой файл .htaccess.

Таким образом, через .htaccess можно сделать перенаправление точечно, а не сразу для всего ресурса.

Виды редиректов

Помимо разных способов настройки переадресации, существуют разные виды редиректов. Каждый из них имеет своё кодовое название. Основные виды:

  • 300 — сообщает, что по искомому запросу можно перейти не на одну, а на несколько альтернативных страниц;
  • 301 — его настраивают, когда страница навсегда перенесена на другой URL. При таком редиректе поисковики индексируют только новый вариант страницы — на неё и попадает пользователь;
  • 302 — его настраивают, когда страница перенесена временно. В этом случае поисковые системы индексируют и старый, и новый вариант страницы;
  • 303 — на схожую по тематике страницу;
  • 305 — отсылающий к подключению через прокси-сервер.

Также существуют 304-й, 306-й и 307-й редиректы. Однако сейчас эти виды практически никто не использует. Одни из самых популярных видов — это 301-й и 302-й.

301-й редирект (Moved Permanently) — это постоянный редирект. Используется для перемещения страницы на новый URL-адрес насовсем. Когда поисковые системы встречают страницу с редиректом 301, они «понимают», что теперь необходимо индексировать новую страницу, а старую можно полностью исключить из индексации. Если настроить переадресацию 301 некорректно, на странице будет отображаться ошибка 404. Индексация страниц с ошибками приводит к снижению SEO-показателей всего веб-ресурса

Как сделать редирект через .htaccess

Чтобы сделать перенаправление 301 через .htaccess, перейдите в каталог сайта и откройте .htaccess. Если файла ещё насуществует, создайте его. После этого добавьте в файл строки кода из подходящей инструкции ниже.

301 редирект Битрикс

1С-Битрикс — популярная CMS в которой время от времени необходимо настраивать перенаправление.

Если вы хотите переадресовать домен с WWW на без WWW, укажите:

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$ [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
    RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
</IfModule>

Если вам нужно сделать редирект Bitrix с домена без WWW на WWW, введите комбинацию:

RewriteCond %{ENV:HTTPS} on 
RewriteRule .* - [E=SSL:s] 
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] 
RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]

Где www. — домен, с которого происходит редирект, а www. — домен, на который происходит редирект.

Если вы хотите настроить в Битрикс редирект на другую страницу с http:// на https://, пропишите:

RewriteCond %{HTTPS} off 
RewriteCond %{REQUEST_URI} !^/bitrix/admin/1c_exchange\.php$ [NC] 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

301 редирект для отдельного IP

Добавьте в .htaccess следующие строки:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} 123.123.123.123
RewriteRule ^(.*)$ http://site.ru [R=301,L]

site.ru — имя вашего домена.

301 редирект с одного домена на другой

В файл .htaccess, который находится в папке сайта, с которого необходимо сделать переадресацию, добавьте следующие строки:

RewriteEngine On
RewriteCond %{HTTP_HOST} old-site.ru
RewriteRule (.*) http://new-site.ru/$1 [R=301,L]
  • old-site.ru — домен, с которого происходит редирект;
  • new-site.ru — домен, на который происходит редирект.

301 редирект с http:// на https:// для Linux

Добавьте в .htaccess код из нужного вам примера ниже.

  • Для всех страниц с http:// на https://

    Для всех страниц с http:// на https://, в том числе и с http://www на https://

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

    Если первый вариант не поможет, воспользуйтесь вторым вариантом:

    RewriteEngine On
    RewriteCond %{HTTPS} =off 
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

    Если все варианты не помогли и возникает циклическая переадресация:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteEngine On 
    RewriteCond %{ENV:HTTPS} !on 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • Перенаправление на https только выбранной страницы.

    В примерах ниже переадресация настраивается для страницы login.php:

    RewriteEngine On
    RewriteCond %{HTTPS} =off
    RewriteCond %{REQUEST_URI} =/login.php
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

    Или:

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteCond %{REQUEST_URI} =/login.php
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
  • Перенаправление на https всех страниц, кроме одной

    В примере ниже редирект настраивается для страницы test.php:

    RewriteEngine On
    RewriteCond %{HTTPS} =off
    RewriteCond %{REQUEST_URI} !^/test.php
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из панели управления хостингом, раздел «Помощь и поддержка».