跳至正文

wordpress混合内容导致无法加载图片

最近更新了一下wordpress系统,结果发现我所有的文章里的图片都加载不出来了!!!

一开始认为是网络的问题,就打开了devtools想要一探究竟的时候,直接15个错误糊到了我脸上

A screenshot of blocked mixed content errors in the Security Pane of the Web Console
当时忘了截图了,引用一张MDN的截图吧

于是,就去了MDN查了一下这个错误的含义:

当用户以 HTTPS (en-US) 浏览网站时,他们与服务器之间的连线就会以 TLS (en-US) 加密,以防受到窃听或中间人攻击。 一个含有 HTTP 明文内容的 HTTPS 页面称为混合内容(mixed content)。 这种页面只有部分加密,没有加密的内容,易于遭到窃听和中间人攻击。 这会令网页不安全。

—— 混合内容 – Web 安全 | MDN (mozilla.org)

突然想起来我是通过cdn套的https流量,所以才会让wordpress以http发起多媒体请求的 毕竟穷人只能白嫖公共服务,我是真的买不起付费的啊(虽然也捐助了一点)

知道了问题,那么我们就可以很好的解决这个问题了:

既然是http到https之间的问题,那么我们就通过修改服务器返回的Header让http请求自动升级到https即可

我的web服务器是apache httpd服务器,其他web服务器大同小异

# BEGIN WordPress
# 在"BEGIN WordPress"与"END WordPress"之间的指令(行)是
# 动态生成的,只应被WordPress过滤器修改。
# 任何对标记之间的指令的修改都会被覆盖。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

<IFModule mod_headers.c>
       Header add Content-Security-Policy "upgrade-insecure-requests"
</IFModule>

当然,.htaccess文件有可能会被wordpress的更新请求覆盖掉,如果有条件,建议还是写进apache.conf里:

<VirtualHost *:5002>
        ServerName blog.yang-qwq.ml
        #ServerAdmin [email protected]
        DocumentRoot /var/www/wordpress
  		  <IFModule mod_headers.c>
       		Header add Content-Security-Policy "upgrade-insecure-requests"
		  </IFModule>
</VirtualHost>

当然,前提是你要启用web服务器相关的Header修改模块

LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

执行apachectl graceful刷新配置,问题成功解决,新发布的请求中已经存在了指定的http标头,至此,问题修复完成

content-security-policy: upgrade-insecure-requests
4
为博客质量打分

给我的博客打个分吧,喜欢的话还请多多支持!

Please add vote reason

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注