- Что выбрать: 301 и где ставить редирект
- Подготовка перед правкой htaccess
- Вариант 1. Переадресация всего домена на новый домен (301)
- Вариант 2. Редирект с домена на домен с сохранением подстановок и всех URL
- Вариант 3. Если вы переезжаете с www на без www или наоборот
- Вариант 4. Переадресация только части URL (точечно)
- Как избежать циклического редиректа (частая ошибка)
- Чек-лист проверки редиректа
- Типичные ошибки при настройке htaccess
- Короткий шаблон для переезда домена
- Итог
Редирект через 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
- Сделайте копию файла htaccess и сохраните ее локально.
- Убедитесь, что редирект будет работать на том же протоколе (http или https). Неправильная связка часто приводит к циклам.
- Для кириллических доменов используйте 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
- Правило добавили не на старом домене, а на новом.
- Указали неправильный протокол (http/https), из-за чего начинается цикл.
- Путают регулярные выражения. Например, host не совпадает из-за точки или регистра, и условие RewriteCond не выполняется.
- Забыли, что htaccess в подпапках может перекрывать корневые правила.
- Создали цепочку редиректов 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