Переадресация 301 в .htaccess: страница, раздел, весь сайт
Переадресация 301 сообщает браузеру и поисковикам, что страница переехала насовсем. Для одной страницы или раздела хватает одной строки Redirect в .htaccess; RewriteRule пригодится, когда в старом адресе есть параметры после «?» или когда два домена открывают одну папку.
Содержание 12
Что сделать прямо сейчас
- Перед правкой сохраните копию файла .htaccess к себе на компьютер: если что-то пойдёт не так, её можно будет вернуть.
- Откройте .htaccess в корневой папке сайта — где он лежит.
- Добавьте строку для своего случая: одна страница, раздел или весь сайт на новый домен.
- Сохраните файл и проверьте переадресацию — как проверить. Если появилась ошибка 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 permanent | 301 | страница переехала насовсем |
Redirect без кода или Redirect temp | 302 | временно — про код 302 |
Redirect 307 | 307 | временно; чем 307 отличается от 302 — в статье про 307 |
Redirect 308 | 308 | насовсем — про код 308 |
Redirect gone | 410 | страницы больше нет, замены нет |
Пока настраиваете, ставьте 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 — пример |
Источники
- Документация Apache: Redirect — старый путь — от корня, с учётом регистра, совпадение по целым частям пути; остаток пути и параметры переносятся в новый адрес; без кода — 302; permanent, temp, seeother, gone и числовые коды.
- Документация Apache: RedirectMatch — то же, что Redirect, но с регулярным выражением и ссылками $1.
- Документация Apache: когда mod_rewrite не нужен — простые переадресации делают строками Redirect и RedirectMatch.
- Документация Apache: RewriteRule — шаблон не видит имя сайта и параметры — для них условия с %{HTTP_HOST} и %{QUERY_STRING}; параметры по умолчанию переходят в новый адрес без изменений.
- Документация Apache: флаг QSD — убирает параметры запроса из нового адреса.
- Документация Apache: флаг R — без числа — код 302; ставят вместе с L.
- Исходный код Apache 2.4.58: http_protocol.c — код 308 Permanent Redirect есть в списке ответов Apache 2.4.58.
- Документация Apache: mod_rewrite в .htaccess — нужны AllowOverride FileInfo и FollowSymLinks; путь без косой черты в начале; RewriteBase; петли и флаг END; RewriteOptions Inherit; кэш браузера для 301.
- Timeweb: типовые перенаправления — Redirect 301 для всего сайта, переезд на другой домен через условие с %{HTTP_HOST}.
- Спринтхост: файл .htaccess — строки Redirect 301 и 302, раздел «Перенаправления» в панели.
Сверено 14 октября 2026 года.
Что почитать дальше
- Редирект 301что значит код 301.
- Редирект 302временная переадресация.
- Ошибка 410 Goneкогда страницу убирают насовсем.
- RewriteRule в .htaccessкак устроены правила с условиями.
- Переадресация на HTTPS через .htaccessправило для своего хостинга.
- Файл .htaccessчто это, как создать и не сломать сайт.