Как настроить редиректы в htaccess?

.htaccess - это файл конфигурации для веб-сервера Apache. Управляет работой веб-сервера и настройками сайта при помощи специальных директив без изменения основного конфигурационного файла веб-сервера.

Директивы, прописанные в файле .htaccess действуют на текущую директорию сайта и на все дочерние подкаталоги. Файл .htaccess, расположенный в корне вашего сайта, будет применять настройки для всего сайта.

Синтаксис файла .htaccess

Общий синтаксис директив можно записать в следующем виде:
Команда параметр_1 параметр_2 флаги

Как настроить редирект?

Редирект в .htaccess выполняет при помощи трех директив:
  • RewriteBase - указывает префикс адреса;
  • RewriteCond - проверяет условия;
  • RewriteRule - изменяет URL, в соответствие с указанными правилами записанными в виде регулярных выражений.


Для работы редиректов сначала необходимо включить модуль Mod_Rewrite, если он еще не включен
RewriteEngine on

Далее, укажем что в качестве префикса для URL необходимо использовать корень сайта:
RewriteBase /

Осталось написать правило для изменения URL или редиректа:
RewriteRule index.html /index.php

Для написания правил редиректа в .htaccess возможно использование регулярных выражений, которые позволяют создавать маски или шаблоны URL, по которым будут происходить редиректы.

Основные специальные символы регулярных выражений:


  • ^ - начало строки;
  • $ - конец строки;
  • . - любой символ;
  • * - любое количество любых символов;
  • ? - один определенный символ;
  • [0-9] - последовательность символов, например, от 0 до 9;
  • | - символ или, выбирается или одна группа, или другая;
  • () - иcпользуется для выбора групп символов.



Так же в .htaccess возможно использование переменные с данными, полученными из заголовков запроса:
  • %{HTTP_USER_AGENT}- поле User-Agent, которое передает браузер пользователя;
  • %{REMOTE_ADDR}- IP адрес пользователя;
  • %{REQUEST_URI}- запрашиваемый URI;
  • %{QUERY_STRING}- параметры запроса после знака ?.


Пример 301 редиректа

RewriteCond %{HTTP_HOST}^bestdomain\.ru$ [NC]
RewriteRule ^(.*)$ http://www.bestdomain.ru/$1 [R=301,L]

Такая запись делает следующее:
  1. Сравнивается переменная HTTP_HOST на соответствие домену bestdomain.ru
  2. флаг [NC] - отключается регистрозависимость
  3. RewriteRule ^(.*)$ - по маске определяем в URL часть, которая следует за доменом, то есть после bestdomain.ru/ и записывается в переменную $1
  4. Происходит 301 редирект на URL www.bestdomain.ru/$1, вместо $1 подставится найденная часть URL по маске ^(.*)$ - любой набор символов начиная с начала строки и до ее конца.
  5. флаг R=301 - Код 301 редиректа
  6. L(Last)- последнее правило


Комментарии