Пошаговая настройка 301 редиректа через файл .htaccess
Файл .htaccess — основной метод для Apache, когда нужно сделать редирект страницы, раздела или домена без изменения общей конфигурации сервера. Ниже — пошаговая настройка от доступа к файлу до готовых правил.
Этот способ легко масштабировать: одно правило может обрабатывать не один адрес, а целый набор URL по заданного шаблону.
Как найти и открыть файл .htaccess на сервере
- Войдите в панель хостинга.
- Откройте файловый менеджер или подключитесь через FTP.
- Перейдите в корневой каталог сайта, обычно public_html, www или htdocs.
- Включите показ скрытых файлов: точка в начале имени делает .htaccess невидимым по умолчанию.
- Откройте документ в редакторе. Если файла нет, создайте новый файл с именем .htaccess.
Файл находится в корне ресурса, но в некоторых панелях его не видно без включения специальных опций в окне файлового менеджера.
Включение mod_rewrite: директивы RewriteEngine On и Off
Чтобы редирект в htaccess работал, нужен модуль mod_rewrite. В начале правил необходимо включить обработку:
<IfModule mod_rewrite.c>
RewriteEngine On
Options +FollowSymLinks
</IfModule>
Если RewriteEngine Off или строка отсутствует, последующие директивы могут не применяться.
Флаг On включает механизм перезаписи, а Off отключает его. Проверить модуль можно через phpinfo, панель хостинга или запрос в поддержку.
Синтаксис RewriteRule и RewriteCond: детальный разбор
RewriteCond задает условия, RewriteRule выполняет действие. Например, %{HTTP_HOST} проверяет домен, ^ и $ фиксируют начало и конец строки, [NC] отключает учет регистра, (.*) захватывает часть URL, $1 подставляет ее в новый адрес, [R=301,L] сообщает HTTP-протоколу постоянный код ответа и останавливает правило.
Важно не создавать несколько переадресаций подряд. Цепочка редиректов вида A → B → C замедляет загрузку, усложняет обход роботами и снижает чистоту передачи сигналов.
Символов в правилах немного, но каждый имеет значение. Например, флаг NC полезен, когда в URL могут встречаться разные регистры, а условие not применяется, если нужно исключить адрес из общего правила.
Готовые правила: редирект страниц, разделов и всего домена
Редирект одной страницы:
Redirect 301 /old-page/ https://example.com/new-page/
Редирект раздела:
RedirectMatch 301 ^/old-folder/(.*)$ https://example.com/new-folder/$1
301 редирект без www:
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Редирект с non-www на www:
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
Редирект с http на https:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Смена домена:
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]
Redirect и RedirectPermanent относятся к mod_alias и подходят для простых задач. RewriteRule гибче: он работает с условиями, регулярными выражениями и переменными сервера.
Для проверки можно взять один тестовый URL, затем расширить правило на остальные адреса. Если нужно оптимизировать большой список, лучше сначала собрать таблицу соответствий и только потом переносить код в рабочий файл.
Редирект с исключением отдельных страниц: синтаксис и пример кода
Чтобы исключить из редиректа одну страницу, используют отрицающее условие:
RewriteCond %{REQUEST_URI} !^/your_page\.php$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
Так можно оставить доступной страницу проверки SSL, служебный файл или отдельный технический URL.
Если исключений несколько, добавляют следующие строки RewriteCond. Такой формат удобен, когда нужно сохранить доступ к файлам подтверждения прав, служебным скриптам или странице политики.
Переадресация страниц с ошибкой 404 на главную через ErrorDocument
Для новостных сайтов иногда задают:
ErrorDocument 404 https://example.com/
Для коммерческих сайтов такой прием лучше не использовать массово. Поисковые системы могут расценить переадресацию всех несуществующих страниц на главную как некорректную обработку устаревших URL.
Вместо массового переноса лучше сделать карту релевантных соответствий: старые материалы блога на новые статьи, товары на категории, услуги на близкие посадочные страницы.
Использование переменных сервера HTTP_HOST и REQUEST_URI в правилах
%{HTTP_HOST} проверяет домен в запросе.
%{REQUEST_URI} сохраняет путь и параметры URL.
%{REQUEST_FILENAME} проверяет, существует ли физический файл на сервере.
Эти переменные помогают настраивать гибкие правила для крупных сайтов, где структура URL отличается от стандартной.
С их помощью можно обработать любой путь, сохранить параметры и автоматически перенести пользователя на актуальную версию без ручного перечисления каждой страницы.