Файл .htaccess — один из самых распространенных инструментов для настройки серверных редиректов на Apache. Через него прописывают правила перенаправления для отдельных страниц, целых разделов, доменов и дублей URL, не трогая основную конфигурацию сервера.
В этой статье разберем, как работает 301 редирект в .htaccess, когда достаточно простой директивы Redirect, когда нужен RewriteRule и как на практике выглядят типовые сценарии: перенаправление страницы, домена, www, index.php и главной.
Стоит учитывать, что Apache поддерживает и Redirect через модуль mod_alias, и правила mod_rewrite, и сам рекомендует для простых URL-манипуляций использовать возможности mod_alias, а не усложнять задачу mod_rewrite.
Что такое 301 редирект в .htaccess
301 редирект в .htaccess — это способ настроить постоянное перенаправление на уровне веб-сервера Apache. Он информирует браузеры и поисковые системы о том, что старая страница или адрес окончательно перемещены на новый URL. В отличие от временного редиректа, постоянный вариант передаёт SEO-вес страницы и сигнализирует поисковикам, что старый адрес больше не должен появляться в индексе.
Редирект 301 .htaccess настраивается через директивы, доступные прямо в файле .htaccess, — без доступа к основному конфигурационному файлу сервера. Это удобно в общем хостинге, где настройки httpd.conf закрыты.
В этом случае 301 может работать через модуль mod_alias (директивы Redirect, RedirectPermanent, RedirectMatch) или через mod_rewrite (RewriteRule в сочетании с флагами).
Важно понимать, что оба способа решают схожие задачи, но по-разному. Редирект 301 через mod_alias проще в написании и чтении, а mod_rewrite даёт больше возможностей для условий и маскирования — то есть для обработки целых групп адресов по шаблону, а не только одного конкретного URL.
Когда в .htaccess использовать Redirect, а когда RewriteRule
Для большинства простых задач — перенос одной страницы, перенаправление раздела, смена домена — достаточно Redirect permanent. Это более читаемая и надёжная запись 301 редиректа для очевидных сценариев. Документация Apache прямо указывает: mod_alias подходит для простых URL-манипуляций, и в таких случаях mod_alias предпочтительнее mod_rewrite.
RewriteRule нужен, когда требуется более сложная логика:
- регулярные выражения, условия через RewriteCond;
- маски для групп URL;
- работа с параметрами.
Директивы 301 редиректа через mod_rewrite позволяют, например, перенаправлять все страницы подраздела по шаблону, добавлять или убирать www по условию протокола, обрабатывать URL с параметрами. Запросы «301 редирект RewriteRule» и «RewriteCond 301 редирект» как раз описывают этот сценарий.
Практическое правило:
- Если задачу можно решить через Redirect — решать через Redirect.
- RewriteEngine и RewriteRule стоит подключать тогда, когда без них не обойтись.
Apache рекомендует использовать флаг [R=301,L] при работе с mod_rewrite, а при необходимости постоянного перенаправления — указывать код явно, а не полагаться на дефолтное поведение.
Как прописать 301 редирект в .htaccess: типовые примеры
Ниже — основные сценарии настройки 301 редиректа через .htaccess.
Редирект с одной страницы на другую (через mod_alias):
Redirect 301 /old-page/ https://example.com/new-page/
Редирект с www на без www (через mod_rewrite):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Редирект без www на www — симметричный вариант с ^example\.com.
Редирект с index.php или index.html на главную:
Redirect 301 /index.php https://example.com/ Redirect 301 /index.html https://example.com/
Редирект с одного домена на другой:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [NC]
RewriteRule ^(.*)$ https://newdomain.com/$1 [R=301,L]
Редирект со старого URL на новый через RedirectMatch (с маской):
RedirectMatch 301 ^/old-section/(.*)$ https://example.com/new-section/$1
Apache описывает Redirect permanent как постоянный 301, а RedirectMatch и RewriteRule — как инструменты для сопоставления по шаблонам и регулярным выражениям. Короткие примеры выше покрывают большинство практических задач без избыточного усложнения.
Какие ошибки чаще всего допускают при настройке 301 редиректа в .htaccess
Первая и самая распространенная ошибка — использование mod_rewrite там, где достаточно простого Redirect. Излишняя сложность правил без необходимости усложняет файл и часто становится причиной трудно диагностируемых конфликтов с 301 редиректами в .htaccess.
Отсутствие флага [L] в RewriteRule — вторая частая проблема. Без него Apache продолжает применять другие правила после срабатывания текущего, что приводит к непредсказуемому поведению. Apache явно предупреждает: R без L может давать некорректный результат.
Два 301 редиректа в цепочке (когда один ведет на другой, который снова редиректит) — тоже распространённая ошибка, удлиняющая путь и снижающая скорость.
Другие типовые проблемы:
- 301 редирект со всех страниц на главную вместо конкретных URL — теряется вся структура сайта.
- Неверная логика RewriteCond, из-за которой условие срабатывает не так, как ожидалось.
- 301 редирект без учёта query-параметров (?id=, ?utm= и т.д.) возникает, когда правила не обрабатывают параметры URL, из-за чего редирект работает неправильно для адресов с ?query=.
- 301 редирект маска — применение шаблона, захватывающего лишние URL.
Apache отдельно указывает, что mod_rewrite мощный, но сложный, и ошибки в нём бывает трудно обнаружить без проверки итогового поведения.
Если вам важно не просто прописать редирект, а настроить корректную схему перенаправлений без циклов, дублей и потери логики сайта, VICTORY group поможет проверить текущие правила в .htaccess, найти ошибки и выстроить правильную систему редиректов под задачи проекта.
Что важно проверить после настройки 301 редиректа в .htaccess
После добавления правил в .htaccess важно убедиться, что редирект работает так, как задумано, а не просто не выдаёт ошибку.
- Нужно проверить, какой HTTP-код реально возвращает сервер: это можно сделать через инструменты разработчика в браузере или онлайн-сервисы проверки заголовков.
- Убедиться, что перенаправление ведёт на правильный URL без лишних промежуточных шагов — цепочка 301→301 или 301→302 замедляет загрузку и снижает эффективность передачи поискового веса.
- После добавления нового правила нужно проверить, не сломались ли соседние URL, которые раньше работали корректно.
Даже правильная запись в .htaccess требует проверки на практике, особенно если на сайте уже есть другие правила RewriteRule, RewriteCond или Redirect.
Apache обрабатывает эти директивы в порядке их следования, и взаимодействие нескольких правил может давать результат, который отличается от ожидаемого.
Финальная проверка поведения — обязательный шаг после любых изменений в файле.





