SSL证书部署
混合内容警告:HTTPS页面加载HTTP资源怎么修

迁移HTTPS后打开网站,浏览器地址栏的锁变成了三角警告,点开一看写着“此页面正在尝试从未经验证的来源加载脚本“。用户看到这个警告第一反应是什么?关掉页面。你的SSL证书白装了。

这就是混合内容问题。HTTPS页面里只要有一个资源是HTTP的,浏览器就会报警告甚至直接拦截。常见的触发资源包括图片、CSS文件、JS脚本、字体文件、iframe嵌入。

怎么找到混合内容资源

最直接的方法:用Chrome打开你的HTTPS页面,按F12打开开发者工具,切到Console面板。所有被拦截的混合内容资源会以红色错误信息列出来,包括具体是哪个文件的什么类型资源。

如果网站页面多,逐个手动检查不现实。用Screaming Frog爬虫工具全站扫描,在报告中筛选“Mixed Content“类别,一次导出所有问题URL和对应资源地址。

另一个高效方法:在浏览器地址栏输入view-source:加你的页面URL,然后Ctrl+F搜索“http://“。每个出现的http://都可能是一个混合内容源。

三类修复方案按场景选用

方案一:直接改协议。如果混合资源是你自己服务器上的文件,把http://改成https://就行。比如图片路径从http://域名/images/logo.png改成https://域名/images/logo.png。前提是你的服务器已经支持HTTPS。

方案二:用协议相对URL。把链接里的http:或https:去掉,写成//域名/images/logo.png。浏览器会自动用当前页面的协议来加载资源。这种方法适合你不确定资源服务器是否支持HTTPS的情况,但现在已经不推荐了,因为当用户通过文件协议打开页面时会出问题。

方案三:本地化或换CDN。如果混合内容来自第三方且对方不支持HTTPS,比如某个统计代码或第三方组件,你有两个选择。一是把资源下载到自己服务器上,通过HTTPS加载。二是找一个支持HTTPS的替代CDN。比如把http://第三方域名/统计.js替换成一个支持HTTPS的统计服务。

CMS系统批量修复

WordPress用户在数据库里执行一条UPDATE语句就能批量替换:把wp_posts表里post_content字段中所有http://你的域名替换成https://你的域名。同时检查wp_options表里的siteurl和home字段,确保都改成https://。

ThinkPHP、Laravel等框架的网站,检查配置文件里的静态资源路径常量。很多项目把资源域名写死在配置文件里,改一处全局生效。

有个容易漏的地方:通过JS动态插入的资源。比如代码里用document.write输出一个script标签,src是http://的。这种混合内容不会出现在页面源码里,必须用开发者工具的Network面板才能抓到。过滤条件选“Blocked“或搜索http://,定位到具体是哪个JS文件输出的。

修完之后别忘了一步验证:用SSL Labs的SSL Test工具检测你的页面,确认混合内容警告已经消失。同时把百度搜索资源平台的https认证跑一遍,确保百度那边也不报混合内容错误。这一步过了,你的HTTPS迁移才算真正干净。