Сайт работает по HTTP после установки SSL: причины и решение
Краткий ответ: Если после установки SSL-сертификата сайт всё ещё открывается по HTTP, значит не настроен принудительный редирект с HTTP на HTTPS. Решение — добавить несколько строк кода в wp-config.php или настроить редирект 301 в .htaccess / конфигурации веб-сервера.
Почему сайт продолжает работать по HTTP после установки SSL?
Вы установили SSL-сертификат, браузер показывает зелёный замочек при открытии через HTTPS, но сайт по-прежнему доступен по обычному HTTP, и многие посетители заходят именно на незащищённую версию. Знакомая ситуация?
SSL-сертификат — это как установка замка на входную дверь. Сам по себе он не закрывает старую дверь (HTTP). Нужно настроить принудительное перенаправление — чтобы все, кто пытается войти через старую дверь, автоматически попадали на новую, защищённую.
Когда это происходит
Самый частый сценарий — вы или ваш хостинг-провайдер установили SSL-сертификат через Let’s Encrypt, cPanel или панель хостинга, но забыли (или не знали) про третий шаг: редирект. В большинстве панелей управления этот шаг не делается автоматически.
Другая причина: WordPress кэширует URL сайта в базе данных. Даже при правильном редиректе страницы админки могут грузиться через HTTP.
Три способа настроить принудительный HTTPS
Способ 1: через wp-config.php (рекомендуется)
Это самый надёжный способ — он работает независимо от веб-сервера (Apache, Nginx, OpenLiteSpeed).
Откройте файл wp-config.php в корне сайта и перед строкой /* That's all, stop editing! Happy blogging. */ добавьте:
// Принудительный HTTPS в админке
define('FORCE_SSL_ADMIN', true);
// Принудительный HTTPS для всего сайта
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') {
$_SERVER['REQUEST_SCHEME'] = 'https';
} else {
header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], true, 301);
exit();
}
Если сайт стоит за Cloudflare или другим CDN, добавьте сверху проверку заголовка CF-Visitor:
if (isset($_SERVER['HTTP_CF_VISITOR'])) {
$cf_visitor = json_decode($_SERVER['HTTP_CF_VISITOR']);
if ($cf_visitor->scheme === 'https') {
$_SERVER['HTTPS'] = 'on';
}
}
Способ 2: через .htaccess (Apache / LiteSpeed)
Добавьте в начало файла .htaccess в корне сайта (перед строкой # BEGIN WordPress):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
Почему до # BEGIN WordPress? WordPress размещает свои правила внутри маркеров # BEGIN WordPress … # END WordPress. Если вписать редирект внутри этого блока, обновление permalink’ов может его стереть. Размещение снаружи защищает правило от случайного удаления.
Способ 3: через Nginx
Если сайт работает на Nginx (проверить можно в панели хостинга или спросить поддержку), отредактируйте серверный блок (обычно лежит в /etc/nginx/sites-available/ваш-сайт):
server {
listen 80;
server_name ваш-сайт.ru www.ваш-сайт.ru;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name ваш-сайт.ru www.ваш-сайт.ru;
# здесь — остальная конфигурация сайта
}
Проверка и отладка
После настройки проверьте три вещи:
- Откройте сайт через http:// — должно автоматически перенаправить на https://
- Проверьте админку: зайдите на
http://ваш-сайт.ru/wp-admin— должно перенаправить на HTTPS - Проверьте консоль браузера (F12 → Console): не должно быть ошибок «Mixed Content» (смешанный контент, когда часть ресурсов грузится по HTTP)
Для глубокой проверки используйте сервисы:
— SSL Labs — оценка безопасности сертификата
— Why No Padlock — поиск смешанного контента
Частая ошибка: цикл редиректов (ERR_TOO_MANY_REDIRECTS)
Если после настройки сайт выдаёт ошибку «Слишком много перенаправлений», скорее всего ваш хостинг или CDN (Cloudflare) уже завершает SSL на своём уровне, а сервер получает трафик уже по HTTP. Решение:
- Отключите Flexible SSL в Cloudflare → переключите на Full (strict)
- В wp-config.php — используйте проверку через
HTTP_X_FORWARDED_PROTOвместоHTTPS - В .htaccess — замените
RewriteCond %{HTTPS} offна:
apache
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Что если ничего не помогло?
Три возможные причины:
| Причина | Решение |
|---|---|
| Кэш WordPress (object cache / page cache) | Очистите весь кэш: через плагин кэширования и в wp-admin → Настройки → Постоянные ссылки → Сохранить изменения |
| Cloudflare Flexible SSL без редиректа | В панели Cloudflare: SSL/TLS → Edge Certificates → Always Use HTTPS — включить |
| Плагин безопасности блокирует редирект | Временно отключите все плагины безопасности (Wordfence, iThemes Security, Sucuri) и проверьте |
Профилактика
Чтобы не сталкиваться с этой проблемой на новых сайтах:
- Добавьте редирект на HTTPS сразу после установки SSL — не откладывайте
- Включите HSTS (HTTP Strict Transport Security) — это заголовок, который говорит браузеру «всегда используй HTTPS, даже если пользователь вводит http://»:
php
// В wp-config.php
header('Strict-Transport-Security: max-age=31536000; includeSubDomains'); - Проверьте
Настройки → Общиев админке WordPress — оба поля (WordPress Address и Site Address) должны начинаться сhttps://
Вывод
Установка SSL-сертификата — только половина дела. Чтобы сайт действительно работал по HTTPS, обязательно настройте принудительный редирект. Самый универсальный способ — через wp-config.php, он работает на любом хостинге и не зависит от веб-сервера. После настройки проверьте сайт на смешанный контент и перезагрузите кэш, если используете плагины кэширования.
