网站HTTPS后出现混合内容报错?一招解决

陆伍
2天前发布 /正在检测是否收录...
广告 广告 广告 广告 广告 广告 广告 广告 广告 广告

说真的,这个问题我自己前后踩了不下三次坑。网上搜出来的教程十篇有八篇是复制粘贴的,根本不管用。今天按我实际操作的步骤写一遍,网站HTTPS后出现混合内容报错这块就别再走弯路了。

什么是混合内容

网站已经是https了,但页面里某些图片、CSS、JS还是用http://加载的。浏览器会认为这个页面不安全,地址栏那个小锁会变成警告。

网站HTTPS后出现混合内容报错?一招解决

怎么找出来

浏览器打开网站,按F12 → Console,会看到红色报错:

Mixed Content: The page at 'https://...' was loaded over HTTPS,
but requested an insecure image 'http://...'.

它会直接告诉你哪个资源是http的。

最常见的原因

就是你之前发文章的时候,插图用的是http链接。

比如你从别的网站复制了一张图,图片地址是 http://xxx.com/1.jpg。网站开了https之后,这张图就加载不出来了。

解决办法一:把图片下载到本地

最彻底的方式。把那些http的图片全部下载下来,上传到自己服务器,然后文章里的链接改成https的本地地址。

如果文章多,可以写个SQL批量替换:

UPDATE typecho_contents
SET text = REPLACE(text, 'http://旧域名', 'https://新域名');

解决办法二:Nginx强制跳转

在Nginx配置里加一行,把所有http请求自动转成https:

add_header Content-Security-Policy "upgrade-insecure-requests";

这行代码的意思是:浏览器看到http的资源,自动尝试用https加载。

注意:这招只是绕过浏览器警告,如果对方服务器不支持https,图片还是加载不出来。 最好还是把图片存到自己站。

顺便把全站http跳https也配了

宝塔后台 → 网站 → 设置 → 配置文件,加:

if ($server_port = 80) {
    return 301 https://$host$request_uri;
}

这样用户输http也会自动跳到https。


好了,今天就说到这。这种问题说穿了其实不难,关键是排查的时候别慌,一步步看日志。有问题评论区聊。

喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
OωO
取消