HTTPS включили, а сайт всё равно ругается: mixed content и редиректы

После подключения HTTPS сайт не всегда сразу становится “зелёным”. Браузер может показывать предупреждение, часть стилей не загружается, картинки пропадают, формы работают странно. Частая причина — mixed content: страница открыта по HTTPS, но внутри неё есть ресурсы по HTTP.

Иногда проблема не в сертификате, а в старых абсолютных ссылках, настройках редиректа, canonical, sitemap или внешних скриптах.

Проверить сертификат и редирект

Сначала нужно убедиться, что HTTPS открывается и отдаёт корректный код. Затем проверить редирект с HTTP на HTTPS.

curl -I https://example.ru/
curl -I http://example.ru/

Обычно HTTP должен отдавать 301 на HTTPS. Если открываются обе версии без редиректа, поисковые системы и пользователи могут видеть дубли.

server {
    listen 80;
    server_name example.ru www.example.ru;
    return 301 https://example.ru$request_uri;
}

Mixed content

Mixed content хорошо видно в консоли браузера. Нужно открыть DevTools, вкладку Console или Security, и посмотреть, какие ресурсы грузятся через http://.

Типовые источники:

  • картинки в контенте;
  • CSS и JS в старом шаблоне;
  • шрифты;
  • внешние виджеты;
  • абсолютные ссылки в базе;
  • Open Graph изображения.

По проекту можно быстро поискать старые абсолютные ссылки:

grep -R "http://example.ru" -n views config web
grep -R "http://" -n views config web

Если ссылки хранятся в базе, нужно искать и там. Например, в контентных страницах:

SELECT id, title
FROM pages
WHERE content LIKE '%http://example.ru%';

Не всегда нужно писать абсолютный URL

Для внутренних ресурсов в шаблонах часто достаточно относительных путей. Так сайт будет нормально работать и на HTTPS, и на тестовом домене.

<link rel="stylesheet" href="/css/site.css">
<script src="/js/app.js"></script>

Для внешних ресурсов лучше использовать https://, если сервис его поддерживает. Старый вариант с protocol-relative URL сейчас обычно не нужен.

Настройки Yii2

Если Yii2 генерирует абсолютные ссылки, нужно проверить hostInfo и baseUrl. После переезда на HTTPS там иногда остаётся http.

'urlManager' => [
    'hostInfo' => 'https://example.ru',
    'enablePrettyUrl' => true,
    'showScriptName' => false,
],

Если проект находится за прокси или балансировщиком, Yii2 может не понимать, что исходный запрос был HTTPS. Тогда отдельно проверяют trusted hosts и заголовки прокси.

Canonical, sitemap и robots.txt

После подключения HTTPS нужно обновить не только редирект. В canonical и sitemap должны быть HTTPS-адреса.

curl -s https://example.ru/ | grep -i canonical
curl https://example.ru/sitemap.xml | grep "http://"
curl https://example.ru/robots.txt

Если sitemap продолжает отдавать http-ссылки, поисковики будут видеть старые адреса. Даже при редиректе это лишняя техническая путаница.

Формы и внешние обработчики

Форма может быть на HTTPS-странице, но отправляться на HTTP-action. Браузер может заблокировать такой запрос или показать предупреждение.

<form action="https://example.ru/contact/send" method="post">

Лучше использовать относительный action, если обработчик находится на том же сайте:

<form action="/contact/send" method="post">

Cookies

После перехода на HTTPS стоит проверить cookies. Для авторизации и сессий обычно полезен secure-флаг, чтобы cookie не уходила по HTTP.

'request' => [
    'cookieValidationKey' => 'secret',
    'csrfCookie' => [
        'httpOnly' => true,
        'secure' => true,
    ],
],
'session' => [
    'cookieParams' => [
        'httpOnly' => true,
        'secure' => true,
    ],
],

Перед включением secure нужно убедиться, что сайт действительно работает только через HTTPS. Иначе пользователи на HTTP могут потерять сессию.

Чек-лист после подключения HTTPS

  1. HTTPS открывается с корректным сертификатом.
  2. HTTP отдаёт 301 на HTTPS.
  3. Нет mixed content в консоли браузера.
  4. В шаблонах нет старых http-ссылок.
  5. В базе нет абсолютных ссылок на старый http-домен.
  6. Canonical использует HTTPS.
  7. sitemap.xml содержит HTTPS-адреса.
  8. Формы отправляются на HTTPS или относительный URL.
  9. Cookies настроены с учётом HTTPS.

HTTPS — это не только установка сертификата. После переключения нужно проверить все места, где сайт сам ссылается на себя или загружает ресурсы. Иначе технически сертификат есть, но пользователь всё равно видит предупреждения.

Комментарии (0)

Пока нет комментариев. Будьте первым!