Проблемы с HTTPS в WordPress: CSS и JS не загружаются, админка не работает. Как исправить?
Недавно я собрал сервер LAMP и установил на него WordPress. Подключил его к интернету через reverse SSH туннель с использованием serveo.net.
Я решил добавить SSL, и остальная часть сайта работает нормально, но WordPress ломается при попытке использовать SSL.
Я зашел в общие настройки и изменил URL-адреса с HTTP на HTTPS, но когда я загружаю страницы, в исходном коде URL-адреса CSS и JavaScript используют HTTP вместо HTTPS, поэтому они не загружаются.
Затем часть wp-admin
вообще перестает загружаться. Как это исправить?
Я просмотрел множество постов о людях с похожими проблемами, но ни один из них не помог.
Проверьте два момента:
- В таблице wp-options URL сайта (в двух местах) должен быть полным, например https://www.example.com.
- Проверьте файл .htaccess сайта на правильность переадресации с http на https.
Для правила в .htaccess в большинстве случаев подходит следующее:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Затем проверьте файлы темы, чтобы убедиться, что все ссылки на CSS/JS используют протокол https, а не http. В большинстве хорошо написанных тем используются относительные, а не абсолютные ссылки на подключаемые файлы.
Также возможно, что какой-то плагин указывает http вместо https.
Используйте вкладку Network в Инструментах разработчика (обычно F12 в вашем браузере), чтобы просмотреть каждый запрос и определить его источник. Если запрос идет к папке плагина, проверьте код в ней.

Я использую стандартную тему Twenty Nineteen. Записи в базе данных правильные, но в секции head есть такие элементы, как <link rel='stylesheet' id='wp-block-library-css' href='http://jtjumper.serveo.net/wp/wp-includes/css/dist/block-library/style.min.css?ver=5.0.3' type='text/css' media='all' /> <link rel='stylesheet' id='wp-block-library-theme-css' href='http://jtjumper.serveo.net/wp/wp-includes/css/dist/block-library/theme.min.css?ver=5.0.3' type='text/css' media='all' />

Если я посмотрю исходный код страницы на моем тестовом (хостинговом) сайте с темой 2019, то href для этих элементов включает протокол https:. И у меня есть htaccess, как показано в моем ответе. И моя таблица wp-options содержит https://www.example.com, а не просто www.example.com. Возможно, у вас не так настроено?

В комментариях недостаточно места для исходного кода, но вот ссылка на страницу: https://jtjumper.serveo.net/wp/ В моей таблице wp-options указаны оба варианта, и оба используют https

У вас есть какой-нибудь плагин кеширования? Ваш htaccess перенаправляет http на https?

единственные плагины у меня это akismet, loginizer, realy simple ssl и wordfence

Отключите все ваши плагины (особенно really simple ssl). Затем настройте ваш htaccess как показано. После этого используйте плагин для поиска и замены (мне нравится "Better Search and Replace") и замените http://www.yourdomain.com на https://www.yourdomain.com.

Этот ответ решает большинство проблем, и я надеюсь, вы уже ознакомились с ним.
Причина, по которой HTTPS (SSL) не работает на моем WordPress, даже после изменений:
- Файла Virtual Host (также известного как
<web_directory>.conf
) в директории/etc/apache2/sites-available
- Файла
wp-config
в директории/var/www/<web_directory>/
- [Для пользователей AWS EC2] Добавления балансировщика нагрузки с SSL-сертификатом для HTTPS-соединений
Если после выполнения всех этих действий ваш сайт отображается без работающих CSS и JavaScript, тогда:
Последний шаг
В панели управления WordPress перейдите в
Настройки>Общие
- В поле
Адрес WordPress (URL)
укажитеhttps://<ваш_домен>.com
- В поле
Адрес сайта (URL)
укажитеhttps://<ваш_домен>.com
- В поле
Я обнаружил, что когда только Адрес сайта (URL)
был активирован с URL сайта, темы WordPress автоматически перенаправляли файлы CSS с HTTPS, то есть https://<WordPressAddress>/css/index.css
.
Поскольку только ваш домен имеет доступ по SSL, добавление имени домена в Адрес WordPress (URL)
решило проблему для меня.

Добавьте этот код в файл wp-config.php
в корневой папке вашего WordPress
.
Также в Общих настройках
в Админ-панели измените http
на https
для параметров siteurl и home.
define('FORCE_SSL_ADMIN', true); // Принудительно включаем SSL для админки
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on'; // Устанавливаем HTTPS, если используется прокси с HTTPS

У меня была такая же проблема, когда я размещал свой сайт на Azure Web App Service под Linux.
Попробуйте этот плагин. Будьте осторожны при его активации — он сразу начинает работать. https://wordpress.org/plugins/jsm-force-ssl/
Этот плагин использует нативные фильтры WordPress вместо буфера вывода PHP для максимальной надежности, производительности и совместимости с кешированием (плагин не влияет на производительность кеширования), а также 301 постоянные редиректы для лучшего SEO (редиректы 301 считаются оптимальными для SEO при переходе с HTTP на HTTPS).
Учитывает переменные прокси / балансировщика нагрузки для крупных хостинговых сред:
HTTP_X_FORWARDED_PROTO HTTP_X_FORWARDED_SSL Требования:
Ваш веб-сервер должен быть настроен с SSL-сертификатом и способен обрабатывать HTTPS-запросы.
Просто активируйте плагин — и всё готово:
Нет никаких настроек плагина для изменения, и не вносятся правки в конфигурацию WordPress — просто активируйте или деактивируйте плагин, чтобы включить / отключить фильтры и динамические редиректы.
