Файл .htaccess позволяет гибко управлять перенаправлениями на сервере Apache без изменения главных конфигураций. Правильно настроенные редиректы сохраняют SEO-позиции при смене адресов, защищают от битых ссылок и улучшают пользовательский опыт. Основной инструмент — модуль mod_rewrite, хотя для простых случаев хватит и директивы Redirect. Разберем конкретные примеры кода для частых задач: переезд на HTTPS, объединение версий с www и без, смена домена.

Базовые директивы: Redirect против RewriteRule

В .htaccess доступны два основных подхода к перенаправлениям. Директива Redirect проще в использовании, но ограничена по функциональности. Модуль mod_rewrite с правилами RewriteRule сложнее, но дает полный контроль над условиями и форматом URL.

Сравнение директив для редиректов
Директива Сложность Гибкость Типовое применение
Низкая Ограниченная Простое перенаправление на другой URL
Высокая Полная Сложные условия, регулярные выражения

Редирект на HTTPS

Принудительное перенаправление с HTTP на HTTPS — одна из самых частых задач. Вот рабочий пример, который проверяет протокол и активирует редирект только для незашифрованных соединений.

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

Директива RewriteCond задает условие: если HTTPS выключен, правило выполняется. Флаг R=301 указывает код постоянного перенаправления, а L останавливает обработку последующих правил.

Склейка www и non-www версий

Поисковые системы рассматривают site.ru и www.site.ru как разные сайты. Выберите один основной вариант и настройте редирект на него. Этот пример перенаправляет все запросы на версию без www.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Условие проверяет, содержит ли домен www. Символ %1 в целевом URL подставляет первую группу из регулярного выражения — то есть домен без www.

Добавление или удаление слеша в конце

Несоответствие в завершающем слеше может дублировать контент. Унифицируйте формат URL. Пример ниже добавляет слеш, если его нет, исключая файлы.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [L,R=301]

Первое условие пропускает реальные файлы, второе — проверяет отсутствие слеша. Флаг R=301 делает перенаправление постоянным.

Переезд на новый домен

При смене адреса сайта нужно перенаправить все старые URL на новые, сохраняя структуру путей. Этот код перенаправляет весь трафик со старого домена на новый.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain.ru$ [NC]
RewriteRule ^(.*)$ https://newdomain.ru/$1 [R=301,L]

Условие ловит запросы к старому домену. Правило подставляет новый домен, сохраняя путь из запроса.

Типовые ошибки и как их избежать

Ошибки в .htaccess могут привести к циклическим перенаправлениям или ошибкам сервера. Проверяйте условия в правилах RewriteCond, чтобы они не конфликтовали друг с другом. Избегайте редиректов с кодом 302 вместо 301 — временные коды не передают вес страниц. Тестируйте изменения на копии сайта или в песочнице перед применением на боевом сервере.

Чек-лист настройки редиректа

Перед внедрением проверьте каждый пункт:

  • Активирован ли модуль mod_rewrite на сервере?
  • Соответствует ли синтаксис правил версии Apache?
  • Нет ли конфликта условий между разными правилами?
  • Используется ли код ответа 301 для постоянных переездов?
  • Сохранен ли путь и параметры запроса при перенаправлении?

Когда .htaccess не подходит

Файл .htaccess работает только на серверах Apache. Для Nginx конфигурация редиректов прописывается в основном файле nginx.conf. При высокой нагрузке на сайт лучше выносить правила в главный конфиг сервера — обработка .htaccess замедляет отклик.