R
редиректо.ru

Настройка редиректа в htaccess: Полное руководство

Скоро

Файл .htaccess — главный инструмент настройки редиректов на серверах Apache. С его помощью можно настроить переадресацию без изменения конфигурации сервера и без помощи хостинг-провайдера.

Что такое .htaccess

.htaccess (hypertext access) — конфигурационный файл веб-сервера Apache. Он позволяет управлять настройками директории, в которой находится, включая:

  • Настройку редиректов (301, 302)
  • Управление доступом
  • Переопределение URL (ЧПУ)
  • Настройку кэширования
  • Обработку ошибок

Важно: файл .htaccess работает только на серверах Apache. Для Nginx используйте конфигурацию сервера.

Базовые редиректы с директивой Redirect

Самый простой способ настроить редирект — использовать директиву Redirect.

Редирект одной страницы

# 301 редирект (постоянный)
Redirect 301 /old-page.html https://example.ru/new-page.html

# 302 редирект (временный)
Redirect 302 /promo https://example.ru/sale

Редирект всего сайта на новый домен

Redirect 301 / https://newdomain.ru/

Ограничение: директива Redirect не сохраняет путь. Все страницы будут вести на главную нового домена.

Редиректы с mod_rewrite

Для сложных правил используйте модуль mod_rewrite. Он поддерживает регулярные выражения и условия.

Включение mod_rewrite

# Всегда добавляйте в начало файла
RewriteEngine On

Редирект домена с сохранением путей

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old-domain\.ru$ [NC]
RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]

Разбор:

  • RewriteCond — условие: если домен = old-domain.ru
  • ^(.*)$ — захватываем весь путь
  • $1 — подставляем захваченный путь
  • [R=301,L] — код 301, последнее правило

Редирект с HTTP на HTTPS

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Редирект с www на без www

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Редирект без www на www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

Комбинированный редирект: HTTP + www → HTTPS без www

RewriteEngine On

# Сначала редирект на HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Затем убираем www
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Частые сценарии редиректов

Удаление расширения .html из URL

RewriteEngine On

# Убираем .html из URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html [L]

# Редирект с .html на чистый URL
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [R=301,L]

Редирект с trailing slash (/)

# Добавить / в конец URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ $1/ [R=301,L]

# Убрать / из конца URL
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} /$
RewriteRule ^(.+)/$ $1 [R=301,L]

Массовый редирект страниц

# Редирект категории
RewriteRule ^blog/(.*)$ /articles/$1 [R=301,L]

# Редирект с параметрами
RewriteCond %{QUERY_STRING} ^id=([0-9]+)$
RewriteRule ^product\.php$ /product/%1? [R=301,L]

Редирект по языку/региону

RewriteCond %{HTTP:Accept-Language} ^ru [NC]
RewriteRule ^$ /ru/ [R=302,L]

RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [R=302,L]

Флаги RewriteRule

ФлагЗначениеОписание
[R=301]RedirectВыполнить редирект с кодом 301
[R=302]RedirectВыполнить редирект с кодом 302
[L]LastПоследнее правило, прекратить обработку
[NC]No CaseБез учёта регистра
[QSA]Query String AppendДобавить query string к новому URL
[NE]No EscapeНе экранировать спецсимволы

Условия RewriteCond

ПеременнаяОписание
%{HTTP_HOST}Имя домена
%{REQUEST_URI}Путь запроса
%{QUERY_STRING}Параметры запроса
%{HTTPS}on/off — протокол
%{REQUEST_FILENAME}Полный путь к файлу
%{THE_REQUEST}Полная строка запроса

Типичные ошибки

1. Бесконечный цикл редиректов

Проблема: страница редиректит сама на себя.

# НЕПРАВИЛЬНО — создаст цикл
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]

Решение: добавьте условие.

# ПРАВИЛЬНО
RewriteCond %{HTTP_HOST} !^example\.ru$ [NC]
RewriteRule ^(.*)$ https://example.ru/$1 [R=301,L]

2. Не работает mod_rewrite

Убедитесь, что модуль включён и разрешён:

# В конфигурации Apache (httpd.conf)
LoadModule rewrite_module modules/mod_rewrite.so

<Directory /var/www/html>
    AllowOverride All
</Directory>

3. Порядок правил имеет значение

Правила применяются сверху вниз. Более специфичные правила ставьте выше общих.

# Сначала конкретные страницы
Redirect 301 /special-page /new-special-page

# Потом общие правила
RewriteRule ^blog/(.*)$ /articles/$1 [R=301,L]

Проверка редиректов

После настройки обязательно проверьте работу редиректов:

  1. В браузере: откройте старый URL и убедитесь, что происходит редирект
  2. curl в терминале:
curl -I https://example.ru/old-page
  1. Онлайн: используйте наш тестер редиректов

Альтернатива: редиректо.ru

Настройка .htaccess требует технических знаний и доступа к серверу. С редиректо.ru вы можете:

  • Настроить редирект в 2 клика без кода
  • Автоматически получить SSL сертификат
  • Включить Path Forwarding одной галочкой
  • Отслеживать статистику переходов

Попробовать бесплатно →

A B

редиректо.ru

Простая переадресация доменов.
Без лишних настроек. Без задержек.

Скоро запуск