Как использовать bloginfo() и get_template_directory_uri() с SSL?

17 янв. 2013 г., 01:48:27
Просмотры: 16.7K
Голосов: 4

У меня есть тема WordPress, которую я пытаюсь использовать на сайте с исключительно SSL-защитой. Не-SSL версии сайта не существует.

Тема WordPress использует различные функции, такие как bloginfo('pingback_url'), bloginfo('template_directory'), get_template_directory_uri() и другие стандартные функции темы.

Все эти функции генерируют ссылки с http, а не https, поэтому ничего не загружается, так как не-SSL версия сайта отсутствует.

Как заставить WordPress использовать https для ВСЕГО?

2
Комментарии

Ссылка? Эти функции должны возвращать HTTPS-URL, если у вас настроен HTTPS-адрес сайта. Как вы указываете своему сайту использовать SSL?

webaware webaware
17 янв. 2013 г. 01:58:20

Также обратите внимание: аналогичная проблема обсуждается здесь, обновлю ответом, если получу его.

webaware webaware
31 янв. 2013 г. 07:23:17
Все ответы на вопрос 2
0

Попробуйте установить этот плагин для WordPress. http://wordpress.org/extend/plugins/wordpress-https/installation/, но обязательно прочитайте инструкцию по установке, так как после активации плагина потребуется выполнить дополнительные действия.

17 янв. 2013 г. 17:28:20
2

Если ваш сайт использует балансировку нагрузки с обработкой SSL, то ваш сервер может не получать ничего в переменной $_SERVER['HTTPS'], а $_SERVER['SERVER_PORT'] может быть 80, когда должен быть 443 (подробнее см. ответ на Stack Overflow).

Если это ваш случай, и вы не можете добиться изменений у хостинг-провайдера, то можно обойти проблему, принудительно указав PHP, что используется SSL. Установите URL-адреса сайта и домашней страницы с https, чтобы все URL-адреса, генерируемые WordPress, использовали https. Затем добавьте этот код в плагин (готовый вариант здесь — поместите его в папку плагинов и активируйте):

// если сайт настроен на работу с SSL, принудительно включаем определение SSL!
if (stripos(get_option('siteurl'), 'https://') === 0) {
    $_SERVER['HTTPS'] = 'on';
}

Примечание: это может иметь обратный эффект, так как у вас, вероятно, есть код (в плагинах или вашем собственном), который проверяет, загружена ли страница через SSL, и перенаправляет, если это не так. Теперь сервер не сможет это проверить! Поэтому также добавьте JavaScript на страницу, чтобы обеспечить хотя бы базовую проверку загрузки защищённых страниц через SSL (это также реализовано в готовом плагине):

<script>
if (document.location.protocol != "https:") {
    document.location = document.URL.replace(/^http:/i, "https:");
}
</script>

Примечание: это не абсолютно надёжно! Однако метод перехватывает большинство ситуаций, за исключением случаев, когда пользователь отключает JavaScript и вручную изменяет URL на http. Если кто-то так поступит, возможно, он заслуживает, чтобы данные его кредитной карты оказались в Эльбонии.

1 февр. 2013 г. 05:20:48
Комментарии

Я хотел бы добавить к этому. У меня была похожая проблема, когда URL отображался как HTTPS, но WordPress показывал URL скриптов и стилей с HTTP, а не HTTPS (из-за чего они не загружались, так как браузеры не разрешают смешивать HTTP и HTTPS). Причина этой проблемы заключалась в том, что я использую Flexible SSL от CloudFlare, и соединение между пользователем и CloudFlare защищено, но соединение между CloudFlare и веб-сервером — нет (поэтому WordPress считает, что HTTPS отключен). Установка значения $_SERVER['HTTPS'] в on решает эту проблему.

SameOldNick SameOldNick
3 февр. 2015 г. 02:34:06

В качестве дополнительного замечания: я установил инструмент командной строки wp с сайта http://www.electrictoolbox.com/wordpress-enable-disable-plugins-command-line/ для включения плагина.

BTR Naidu BTR Naidu
20 апр. 2016 г. 23:37:54