Как сделать редирект с одного домена на другой с сохранением пути в .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 выполните несколько проверок:

    1. Откройте в браузере https://domain2.ru/any/path/ - вас должно перенаправить на https://domain1.net/any/path/.
    2. Используйте онлайн-сервисы проверки HTTP-заголовков (например, redirectcheck.com) - убедитесь, что статус ответа 301 и Location содержит полный путь.
    3. Проверьте логи сервера - если редирект не срабатывает, возможно, модуль mod_rewrite отключён.

    Что делать, если редирект всё равно не сохраняет путь?

    Если после всех исправлений путь всё равно сбрасывается, проверьте:

    • Нет ли в .htaccess других правил, которые переопределяют ваш редирект (например, RewriteRule на корень).
    • Доступен ли файл .htaccess для чтения (права 644).
    • Работает ли mod_rewrite - создайте тестовое правило и убедитесь, что оно выполняется.

    Также убедитесь, что вы редактируете .htaccess именно в корневой директории site.ru, а не в подпапке. Иногда хостинг-провайдеры блокируют некоторые директивы - обратитесь в поддержку.

    Часто задаваемые вопросы