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

Что выбрать: 301 и где ставить редирект

Для переезда домена обычно используют 301. Этот редирект сообщает браузерам и поисковым системам, что адрес изменился навсегда.

Источники:
- Google: как склеивать дубликаты URL и объединять сигналы - https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls
- Яндекс: переезд сайта - https://yandex.ru/support/webmaster/yandex-indexing/moving-site.html

Правило размещения:
- Файл htaccess правьте на сервере того домена, с которого делаете переадресацию.
- Если правила в корне сайта, они применяются ко всему сайту, кроме случаев, когда есть собственные настройки в подпапках.

Подготовка перед правкой htaccess

  1. Сделайте копию файла htaccess и сохраните ее локально.
  2. Убедитесь, что редирект будет работать на том же протоколе (http или https). Неправильная связка часто приводит к циклам.
  3. Для кириллических доменов используйте Punycode (иначе правила могут не совпасть с хостом). Пример конвертера: https://www.reg.ru/whois/

Вариант 1. Переадресация всего домена на новый домен (301)

Поставьте код в корень сайта на старом домене.

Вариант через RewriteRule

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^(.*)$ http://new-domain.ru/$1 [R=301,L]

Замените:
- old-domain.ru - старый домен
- new-domain.ru - новый домен

Если нужно сохранять https, вместо http укажите https в подстановке:

RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]

Вариант через директиву Redirect (быстрее и проще)

Redirect 301 / https://new-domain.ru/

Такой вариант перекинет весь старый домен на новый с сохранением пути.

Вариант 2. Редирект с домена на домен с сохранением подстановок и всех URL

Если нужен редирект, который учитывает запросы для любого пути старого домена, используйте шаблон:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]
  • Группа (.*) забирает весь путь и подставляет его в новый адрес.
  • [L] останавливает обработку следующих правил htaccess.

Вариант 3. Если вы переезжаете с www на без www или наоборот

Это отдельная задача, но часто она случается вместе с переездом.

old без www -> new с www

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

На практике удобнее и надежнее делать зеркала по шаблону домена (вместо сложных условий). Для пары “www/без www” на конкретном домене обычно используют условие по host:

www -> без www

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

без www -> www

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

Если это делаете одновременно с переездом на новый домен, подставляйте new-domain вместо old-domain.

Вариант 4. Переадресация только части URL (точечно)

Например, нужно отправить только один раздел или страницу.

Пример: перенаправить только /old-page на /new-page на новом домене

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^old-page$ https://new-domain.ru/new-page [R=301,L]

Или если нужно сохранить хвост:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^old-section/(.*)$ https://new-domain.ru/old-section/$1 [R=301,L]

Как избежать циклического редиректа (частая ошибка)

Если одновременно заданы правила для http->https и для редиректа домена, сервер может начать “крутить” запрос по кругу.

Рабочая диагностика:
- Откройте редирект в браузере и проверьте ответ. Если видите “слишком много перенаправлений”, есть цикл.
- Попробуйте временно отключить все правила, кроме нужного, и вернуть по одному.

Циклы часто лечатся явным условием по протоколу, например для http->https:

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

Источник по общим принципам редиректа и сценариям: https://help.reg.ru/support/hosting/redirekty/redirekt-cherez-htaccess

Чек-лист проверки редиректа

Что проверить Как сделать Что должно быть
Редирект работает для главной Откройте old-domain.ru/ Перейдет на новый адрес 301
Сохраняется путь Откройте old-domain.ru/some/path Путь появится на новом домене
Сохраняются параметры (если нужно) old-domain.ru/page?x=1 Параметры остаются (если добавите нужную опцию)
Нет цикла Откройте старый адрес в браузере Нет ошибки “слишком много перенаправлений”
Индексация не теряется После переезда смотрите в Search Console Старые страницы уходят, новые укрепляются постепенно

Для автоматической проверки полезны сервисы:
- Redirect Checker: https://www.redirect-checker.org/
- Screaming Frog (сканирование): https://www.screamingfrog.co.uk/seo-spider/

Типичные ошибки при настройке htaccess

  1. Правило добавили не на старом домене, а на новом.
  2. Указали неправильный протокол (http/https), из-за чего начинается цикл.
  3. Путают регулярные выражения. Например, host не совпадает из-за точки или регистра, и условие RewriteCond не выполняется.
  4. Забыли, что htaccess в подпапках может перекрывать корневые правила.
  5. Создали цепочку редиректов 301: старый домен -> промежуточный домен -> новый домен. Лучше делать переход в один шаг.

Короткий шаблон для переезда домена

Если нужно “один домен на другой” на любой путь, используйте этот каркас на старом домене:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]

Итог

Чтобы настроить переадресацию с одного домена на другой через htaccess, поставьте 301 на старом домене и направьте все запросы на новый домен, сохранив путь. Если редирект делается точечно или вы одновременно склеиваете www/без www, условия в RewriteCond подбирайте аккуратно и обязательно проверяйте отсутствие циклов.

Источник по базовым сценариям редиректа через htaccess:
- https://help.reg.ru/support/hosting/redirekty/redirekt-cherez-htaccess
- https://2domains.ru/support/hosting/htaccess-redirect