Редиректы в .htaccess: 301 на HTTPS, с www, со слешем и со старых адресов
53
Время чтения: 9 минут
Готовые правила для .htaccess: HTTPS, www, слеш, переезд страниц. И ошибки, из-за которых редиректы создают цепочки и петли.
Файл .htaccess на Apache позволяет настроить редиректы без правки кода сайта. Ниже готовые правила для самых частых задач. Перед правкой сделайте копию файла: ошибка в нём может положить весь сайт.
Важно: .htaccess работает только на Apache. Если сайт на nginx, правила нужно писать в конфигурации сервера, а на Windows с IIS читайте статью про 301-редирект на IIS.
С HTTP на HTTPS
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Если сайт стоит за CDN или обратным прокси, переменная %{HTTPS} может быть пустой. Тогда используйте заголовок X-Forwarded-Proto.
Вы будете получать статьи по нашим направлениям, советы и кейсы предпринимателей
С www на без www (или наоборот)
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Так адрес www.example.ru перенаправляется на example.ru. Для обратного направления поменяйте условие и адрес назначения.
Слеш в конце адреса
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [R=301,L]
Убрать index.php из адреса
RewriteCond %{THE_REQUEST} \s/index\.php[?\s]
RewriteRule ^index\.php$ / [R=301,L]
Переезд одной страницы
Redirect 301 /staryy-adres/ https://example.ru/novyy-adres/
Типичные ошибки
- Цепочки. Адрес перенаправляется на второй, тот на третий. Каждая пересылка замедляет загрузку и теряет часть сигналов. Редирект должен вести сразу на конечный адрес.
- Петли. Два правила перенаправляют друг на друга, браузер выдаёт «слишком много перенаправлений».
- 302 вместо 301. Временный редирект не передаёт вес страницы так, как постоянный.
- Порядок правил. Правила выполняются сверху вниз. Общие правила (HTTPS, www) обычно ставят выше точечных.
- Нет
RewriteEngine On. Без этой строки правила RewriteRule не работают.
Как проверить
В браузере 301-редиректы кэшируются, поэтому проверять лучше командой curl -I http://example.ru/ или в режиме инкогнито. Полную цепочку редиректов с кодами ответа покажет наш инструмент проверки редиректов.
Если сайт переезжает на другой домен или меняет структуру, правил понадобится много, и ошибка стоит позиций. Такую работу мы выполняем как перенос сайта с 301-редиректами.
Частые вопросы
Чем 301 редирект отличается от 302?
301 означает постоянный переезд, и поисковики переносят сигналы старого адреса на новый. 302 временный, поэтому для переезда и настройки HTTPS нужен 301.
Почему редирект в .htaccess не работает?
Частые причины: нет строки RewriteEngine On, на сервере выключена обработка .htaccess, сайт работает на nginx (там файл игнорируется), правила стоят в неправильном порядке.
Как проверить редирект без кэша браузера?
Используйте команду curl -I с адресом сайта или режим инкогнито. Браузеры кэшируют 301-редиректы, и старый результат может мешать проверке.