Смешанный контент / незащищенный контент SSL
В настоящее время у меня есть проблемы со следующими
Mixed Content: The page at 'https://www.example.com/' was loaded over HTTPS, but requested an insecure stylesheet
Это веб-сайт Wordpress на сервере Centos с httpd
установлены.
У меня есть следующие настройки виртуального хоста в `http.conf:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /var/www/html/example
ServerName www.example.com
ServerAlias example.com
SSLEngine on
SSLCACertificateFile /etc/httpd/conf/ssl.crt/intermediate.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
Redirect / https://www.example.com/
</VirtualHost>
В моем httpd.conf
я изменился AllowOverride
для всех, так это выглядит так:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
Я могу подтвердить htaccess
работает так, как я использую плагин безопасности iTheme, и это работает, как и ожидалось, даже если я набираю мусор в htacces
Я получаю ошибку неверной конфигурации сервера, как и ожидалось.
Я изменил оба URL-адреса Wordpress в панели управления, чтобы использовать https
вместо http
,
После того, как все это было сделано, я смог получить доступ к сайту по HTTP, перенаправиться на HTTPS-версию сайта и посмотреть сайт. Однако в консоли я получаю ошибку, касающуюся смешанного содержимого, и экран замка отображается желтым или красным, а не желаемым зеленым.
Есть несколько файлов, которые являются проблемой, и я знаю, например, я могу изменить URL-адреса вручную, чтобы использовать https
в отличие от http
, Насколько я понимаю, я могу изменить URL-адрес на приведенный ниже, и это просто отрегулирует ссылку на текущий используемый протокол:
<img src="//www.example.com/image.jpg" />
Я также видел, что если ресурс не доступен в течение https
Я могу просто сделать следующее:
https://example.com/imageserver?url=http://otherdomain.com/someimage.jpg&hash=abcdeafad
Я, однако, пытаюсь найти способ исправить все это за один раз, используя htaccess
(что я уверен, что я сделал раньше, но мои фрагменты не работают для меня).
Есть два основных фрагмента, которые я использовал в попытке навязать все https
первое существо:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
#These Lines to force HTTPS
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Второй от Дэйва Уолша:
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
Однако ни один из них, похоже, не решил мою проблему. В качестве меры предосторожности я перезапустил httpd
сервис после каждого изменения даже htaccess
изменения, которые не должны требовать перезапуска, однако ситуация остается прежней. Может кто-то указать мне верное направление?
1 ответ
Самое простое решение - заменить все ссылки вручную, используя приведенное ниже решение, что сэкономит ваше время и сделает его совершенно простым.
Идея состоит в том, чтобы удалить все (протокол HTTP и HTTPS) и оставить их для использования протокола относительного URL /questions/43900317/url-bez-httphttps/43900323#43900323
Мы можем сделать это, используя следующий код для index.php
<?php
//this lined added here
ob_start();
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
//and these lines also
$output = ob_get_contents();
ob_end_clean();
$output = str_replace(array("https://", "http://"), "//", $output);
echo str_replace('http:\/\/', "\/\/", $output);