Как сделать редирект с одного домена на другой с сохранением пути в .htaccess
Перенаправление трафика с одного домена на другой - частая задача при смене основного зеркала сайта или объединении ресурсов. Главная сложность - сохранить внутреннюю структуру URL, чтобы пользователь попадал на ту же страницу, но уже на новом домене. В этой статье разберём правильную настройку 301 редиректа через файл .htaccess с помощью модуля mod_rewrite.
Почему стандартный редирект не сохраняет путь?
Многие вебмастера сталкиваются с ситуацией, когда после добавления правил в .htaccess любой запрос на domain2.ru/page/subpage/ ведёт на главную domain1.net/, а не на domain1.net/page/subpage/. Чаще всего это происходит из-за неверного порядка директив или отсутствия флага QSA (Query String Append) в нужном контексте. В вашем коде использован RewriteCond %{HTTP_HOST} ^domain2\.ru$ [NC,QSA] - здесь QSA не нужен, он применяется к правилу, а не к условию. Кроме того, в самом RewriteRule может быть ошибка.
Правильный код для редиректа с сохранением URL-пути
Для корректного перенаправления с domain2.ru на domain1.net с сохранением всего пути (включая поддиректории) используйте следующий код в корневом файле .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain2\.ru$ [NC]
RewriteRule ^(.*)$ https://domain1.net/$1 [L,R=301]Пояснение директив
- RewriteEngine On - включает механизм преобразования URL.
- RewriteCond %{HTTP_HOST} ^domain2\.ru$ [NC] - проверяет, что текущий хост равен domain2.ru (флаг NC - регистронезависимая проверка).
- RewriteRule ^(.*)$ https://domain1.net/$1 [L,R=301] - захватывает всю строку запроса после домена (^(.*)$) и подставляет её в новый URL. Флаг L останавливает обработку правил, R=301 делает постоянный редирект.
Обратите внимание: в RewriteCond не нужно указывать QSA - этот флаг применяется в RewriteRule для добавления существующей query string. Если на старом сайте используются GET-параметры, добавьте QSA в RewriteRule: [L,R=301,QSA].
Типичные ошибки при настройке редиректа
При работе с .htaccess часто допускают следующие оплошности:
- Использование флага QSA в RewriteCond вместо RewriteRule.
- Отсутствие слеша в конце домена или лишние пробелы.
- Кеширование браузером 301 редиректа - при тестировании используйте инкогнито-режим или очищайте кеш.
- Размещение правил после других директив, которые уже обработали запрос.
Как проверить, что редирект работает корректно?
После внесения изменений в .htaccess выполните несколько проверок:
- Откройте в браузере
https://domain2.ru/any/path/- вас должно перенаправить наhttps://domain1.net/any/path/. - Используйте онлайн-сервисы проверки HTTP-заголовков (например, redirectcheck.com) - убедитесь, что статус ответа 301 и Location содержит полный путь.
- Проверьте логи сервера - если редирект не срабатывает, возможно, модуль mod_rewrite отключён.
Что делать, если редирект всё равно не сохраняет путь?
Если после всех исправлений путь всё равно сбрасывается, проверьте:
- Нет ли в .htaccess других правил, которые переопределяют ваш редирект (например, RewriteRule на корень).
- Доступен ли файл .htaccess для чтения (права 644).
- Работает ли mod_rewrite - создайте тестовое правило и убедитесь, что оно выполняется.
Также убедитесь, что вы редактируете .htaccess именно в корневой директории site.ru, а не в подпапке. Иногда хостинг-провайдеры блокируют некоторые директивы - обратитесь в поддержку.