Справочник

Переадресация 301 в .htaccess: страница, раздел, весь сайт

Переадресация 301 сообщает браузеру и поисковикам, что страница переехала насовсем. Для одной страницы или раздела хватает одной строки Redirect в .htaccess; RewriteRule пригодится, когда в старом адресе есть параметры после «?» или когда два домена открывают одну папку.

≈ 7 мин чтения
Содержание 12

Что сделать прямо сейчас

  1. Перед правкой сохраните копию файла .htaccess к себе на компьютер: если что-то пойдёт не так, её можно будет вернуть.
  2. Откройте .htaccess в корневой папке сайта — где он лежит.
  3. Добавьте строку для своего случая: одна страница, раздел или весь сайт на новый домен.
  4. Сохраните файл и проверьте переадресацию — как проверить. Если появилась ошибка 500, уберите добавленную строку.

Одна страница

Redirect 301 /old-page/ https://example.com/new-page/

Сначала идёт код 301, затем старый путь, затем новый адрес. Старый путь пишите от корня сайта: с косой черты, без https:// и домена. Новый адрес — целиком, с https://. Если страница остаётся на том же сайте, можно и короче: Redirect 301 /old-page/ /new-page/ — имя сайта Apache подставит сам.

Путь различает большие и маленькие буквы: строка для /old-page/ не сработает на /Old-Page/. Заканчивайте старый и новый адрес одинаково — оба с косой чертой или оба без: Apache дописывает остаток пути к новому адресу как есть, и при разных окончаниях получится адрес с двумя косыми чертами подряд или склеенный.

Строка переадресует и адреса внутри: /old-page/foto/ уйдёт на /new-page/foto/. Если нужен ровно один адрес, возьмите строку RedirectMatch.

Раздел сайта

Redirect 301 /blog/ https://example.com/stati/

Все адреса внутри раздела переедут с сохранением хвоста: /blog/kak-vybrat-hosting/ → /stati/kak-vybrat-hosting/. Параметры после «?» тоже переносятся.

Apache сравнивает начало пути целыми частями между косыми чертами: строка для /blog не сработает на /blogger/.

Ровно один адрес без вложенных

RedirectMatch 301 ^/old-page/$ https://example.com/new-page/

RedirectMatch сравнивает путь с шаблоном: знак ^ — начало пути, $ — его конец. Такая строка переадресует только /old-page/, а /old-page/foto/ оставит на месте. Как читать шаблоны — в статье про RewriteRule.

Весь сайт на новый домен

Redirect 301 / https://example.com/

Эту строку ставят в .htaccess старого домена. Путь и параметры сохраняются: https://example.net/contacts/ уйдёт на https://example.com/contacts/.

Так можно, только если у старого домена своя папка. Если оба домена открывают одну и ту же папку, строка сработает и на новом домене и переадресует его сам на себя — браузер покажет ERR_TOO_MANY_REDIRECTS. Тогда нужно правило с условием:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.net$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]

Условие пропускает к правилу только запросы к example.net и www.example.net, а на example.com правило не сработает. Путь берётся из %{REQUEST_URI}, параметры после «?» переходят в новый адрес без изменений.

Адрес с параметрами

Строка Redirect смотрит только на путь — часть адреса до знака «?». Чтобы учесть параметры, подойдёт правило mod_rewrite: условие RewriteCond проверяет их через %{QUERY_STRING}:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^id=5$
RewriteRule ^index\.php$ https://example.com/page/ [L,R=301,QSD]

Условие проверяет параметры, шаблон правила — путь, причём в .htaccess без косой черты в начале. Флаг QSD убирает старые параметры: без него получится https://example.com/page/?id=5. R=301 задаёт код ответа, L — дальше правила не проверять: подробнее о флагах.

Страница удалена и замены нет

Redirect gone /old-page/

Apache ответит кодом 410: страницы больше нет. Когда лучше 410, а когда 404 — в статье про 410.

Какой код выбрать

СтрокаКодКогда ставить
Redirect 301 или Redirect permanent301страница переехала насовсем
Redirect без кода или Redirect temp302временно — про код 302
Redirect 307307временно; чем 307 отличается от 302 — в статье про 307
Redirect 308308насовсем — про код 308
Redirect gone410страницы больше нет, замены нет

Пока настраиваете, ставьте 302 и меняйте на 301, когда всё работает: так советует документация Apache, потому что браузеры запоминают ответ 301.

Один адрес переадресуйте одним способом — либо строкой Redirect, либо правилом RewriteRule: это разные модули Apache, mod_alias и mod_rewrite.

У Спринтхоста простые переадресации можно настроить и без файла — в разделе «Перенаправления» при управлении сайтом.

Как проверить

В терминале компьютера (как открыть терминал, про curl) введите:

curl -I https://example.com/old-page/

В первой строке ответа должно стоять число 301, а в строке Location — новый адрес. Если пришёл ответ 200, строка не сработала: сверьте путь — от корня, с косой чертой в начале, с теми же большими и маленькими буквами.

Проверьте и адрес внутри раздела, например /old-page/foto/. Вся цепочка видна с ключом -L — curl пройдёт по переадресациям, и последний ответ должен быть 200:

curl -IL https://example.com/old-page/

Браузер запоминает ответ 301, поэтому после исправления строки проверяйте через curl или в окне инкогнито.

Ошибки и как их исправить

Что видитеЧто делать
ошибка 500 после сохраненияуберите добавленную строку и проверьте опечатки — разбор
ответ 200, переадресации нетпуть — от корня, с косой чертой в начале, те же большие и маленькие буквы; на VPS разрешите .htaccess — как
в новом адресе две косые черты подряд или склеенный путьзакончите старый и новый адрес одинаково
ERR_TOO_MANY_REDIRECTSдомены открывают одну папку — нужно правило с условием; разбор ошибки
петля при переезде внутри раздела, например с /blog/ на /blog/new/новый адрес попадает под старую строку — возьмите RedirectMatch с ^ и $
браузер уходит по старой переадресациион запомнил 301 — проверьте через curl или в окне инкогнито
в новый адрес попали старые параметрыдобавьте флаг QSD — пример

Источники

Сверено 14 октября 2026 года.

Что почитать дальше