К основному содержимому

Как настроить редирект с HTTP на HTTPS

Хостинг и cPanel · 10.02.2025 · 4 мин чтения
Иллюстрация к статье «Как настроить редирект с HTTP на HTTPS»

Редирект на 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 запоминается браузером на указанный срок (в примере это год), и откатить его раньше времени не получится простым отключением редиректа.

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

  1. Выполните curl -I http://yourdomain.com — ответ должен содержать заголовок HTTP/1.1 301 и Location: https://yourdomain.com/
  2. Проверьте вариант с www: curl -I http://www.yourdomain.com
  3. Используйте сервис redirect-checker.org для проверки полной цепочки редиректов — если она длиннее одного шага, поисковики теряют часть веса страницы на каждом переходе

Если сайт работает через Cloudflare, режимы шифрования и их влияние на редиректы разобраны в статье про режимы SSL/TLS в Cloudflare. Общие правила .htaccess, включая защиту от прямого доступа к файлам, — в статье .htaccess: правила редиректов и оптимизации.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке