Смешанный контент / незащищенный контент 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);
Другие вопросы по тегам