Перейти к содержимому

Сайт работает по HTTP после установки SSL: причины и решение

Сайт работает по 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;
    # здесь — остальная конфигурация сайта
}

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

После настройки проверьте три вещи:

  1. Откройте сайт через http:// — должно автоматически перенаправить на https://
  2. Проверьте админку: зайдите на http://ваш-сайт.ru/wp-admin — должно перенаправить на HTTPS
  3. Проверьте консоль браузера (F12 → Console): не должно быть ошибок «Mixed Content» (смешанный контент, когда часть ресурсов грузится по HTTP)

Для глубокой проверки используйте сервисы:
SSL Labs — оценка безопасности сертификата
Why No Padlock — поиск смешанного контента

Частая ошибка: цикл редиректов (ERR_TOO_MANY_REDIRECTS)

Если после настройки сайт выдаёт ошибку «Слишком много перенаправлений», скорее всего ваш хостинг или CDN (Cloudflare) уже завершает SSL на своём уровне, а сервер получает трафик уже по HTTP. Решение:

  1. Отключите Flexible SSL в Cloudflare → переключите на Full (strict)
  2. В wp-config.php — используйте проверку через HTTP_X_FORWARDED_PROTO вместо HTTPS
  3. В .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) и проверьте

Профилактика

Чтобы не сталкиваться с этой проблемой на новых сайтах:

  1. Добавьте редирект на HTTPS сразу после установки SSL — не откладывайте
  2. Включите HSTS (HTTP Strict Transport Security) — это заголовок, который говорит браузеру «всегда используй HTTPS, даже если пользователь вводит http://»:
    php
    // В wp-config.php
    header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
  3. Проверьте Настройки → Общие в админке WordPress — оба поля (WordPress Address и Site Address) должны начинаться с https://

Вывод

Установка SSL-сертификата — только половина дела. Чтобы сайт действительно работал по HTTPS, обязательно настройте принудительный редирект. Самый универсальный способ — через wp-config.php, он работает на любом хостинге и не зависит от веб-сервера. После настройки проверьте сайт на смешанный контент и перезагрузите кэш, если используете плагины кэширования.