Редирект на HTTPS через .htaccess
Перед настройкой убедитесь, что SSL-сертификат уже установлен на домене — без него редирект приведёт посетителя на страницу с ошибкой сертификата вместо рабочего сайта. Проверить установку можно в статье про подключение бесплатного SSL.
Универсальный редирект
Откройте файл .htaccess в корне сайта и добавьте:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Код ответа 301 означает «перемещено навсегда» — именно он нужен для HTTPS-редиректа, чтобы поисковики и браузеры запомнили новый адрес и не сохраняли кеш старого HTTP-варианта. Временный редирект 302 для этой задачи не подходит.
Редирект с www на без www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
Редирект через WordPress
В WordPress Settings → General установите адреса с https://. WordPress сам добавит нужные правила и подменит внутренние ссылки в базе данных на новую схему.
Объединение www и HTTPS в одном правиле
Если делать редирект на HTTPS и редирект www отдельными блоками, посетитель с адреса http://www.yourdomain.com пройдёт два перехода подряд: сначала на https://www.yourdomain.com, потом на https://yourdomain.com. Каждый лишний переход — это лишний round-trip до сервера и небольшая потеря скорости загрузки. Правильнее объединить оба условия в одно правило:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://yourdomain.com/$1 [L,R=301]
Так посетитель попадает на конечный адрес одним шагом, независимо от того, с какого варианта он зашёл.
Реальные ошибки при настройке редиректа
Самая частая проблема — бесконечный цикл редиректов, который браузер показывает так:
ERR_TOO_MANY_REDIRECTS
Она возникает, когда сайт находится за Cloudflare или другим прокси-сервером в режиме SSL «Flexible»: Cloudflare отдаёт запрос на origin-сервер по HTTP, .htaccess видит HTTP и редиректит на HTTPS, Cloudflare заново открывает HTTP-соединение — и цикл повторяется бесконечно. Решение — переключить режим SSL в Cloudflare на «Full» или «Full (strict)», либо проверять заголовок X-Forwarded-Proto вместо переменной HTTPS напрямую. Вторая ошибка появляется, если правило добавлено дважды в разных .htaccess файлах (корневой и в поддиректории):
Internal Server Error
500 - RewriteRule: bad flag delimiters
Она означает синтаксическую ошибку в правиле — чаще всего лишний пробел или неэкранированный спецсимвол в регулярном выражении.
Способы редиректа: сравнение
| Способ | Где настраивается | Риск конфликта с Cloudflare |
|---|---|---|
| .htaccess RewriteRule | Файл на хостинге | Высокий при режиме Flexible |
| Настройки WordPress | Админ-панель CMS | Средний, зависит от плагина кеша |
| Always Use HTTPS в Cloudflare | Панель Cloudflare | Низкий, редирект до origin-сервера |
Когда редирект через .htaccess не подходит
- Сайт находится за Cloudflare или другим CDN — правильнее включить редирект на уровне прокси (Always Use HTTPS), а не дублировать его в .htaccess
- Используется статический сайт без Apache (например, отдаваемый через Nginx или CDN-хостинг) — директивы .htaccess там попросту не читаются
- Нужен редирект по условию (страна, устройство, язык) — стандартный HTTPS-редиректор для этого не предназначен, нужна отдельная логика в приложении
- Сайт использует агрессивное кеширование редиректов в браузере — старое правило может «залипнуть» даже после исправления .htaccess
Следующий шаг: HSTS
Редирект на HTTPS защищает только тех, кто уже отправил хотя бы один запрос по HTTP, — сам этот первый запрос всё ещё уязвим для перехвата. Чтобы браузер сразу, без единого HTTP-запроса, обращался к сайту по HTTPS, добавьте заголовок HSTS в .htaccess:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Включать этот заголовок стоит только после того, как редирект на HTTPS проверен и стабильно работает на всех поддоменах — HSTS запоминается браузером на указанный срок (в примере это год), и откатить его раньше времени не получится простым отключением редиректа.
Проверка редиректа
- Выполните
curl -I http://yourdomain.com— ответ должен содержать заголовокHTTP/1.1 301иLocation: https://yourdomain.com/ - Проверьте вариант с www:
curl -I http://www.yourdomain.com - Используйте сервис redirect-checker.org для проверки полной цепочки редиректов — если она длиннее одного шага, поисковики теряют часть веса страницы на каждом переходе
Если сайт работает через Cloudflare, режимы шифрования и их влияние на редиректы разобраны в статье про режимы SSL/TLS в Cloudflare. Общие правила .htaccess, включая защиту от прямого доступа к файлам, — в статье .htaccess: правила редиректов и оптимизации.