ZBlogCMS 部署 SSL 后图片 Mixed Content 报错怎么办
照着这篇做完,你能把 Z-BlogPHP 站点上 HTTPS 后浏览器控制台里的 Mixed Content 报错逐条定位到来源,并彻底清掉,让地址栏的小锁正常显示。
Mixed Content(混合内容)的本质很简单:页面本身走 https,但里面还有资源走 http,浏览器就把这些资源拦下来,图标不显示、样式错乱,控制台刷一片红。下面按「先看报错 → 改配置 → 洗数据库 → 补漏网」的顺序处理。
第一步:先看清到底是哪些资源在报错
打开出问题的页面,按 F12,切到 Console(控制台)标签,找以 Mixed Content 开头、后面跟着一个 http:// 开头的链接的红色提示。
把报错 URL 抄下来,大致分成三类:文章正文里的图片(形如 /zb_users/upload/...)、主题模板里写死的图片(logo、背景图、广告位)、插件输出的资源。分清楚这三类,后面才好对症下药。
注意:要在 https 页面上直接按 F12 看,在 http 页面上看是没有这些报错的,容易白忙一场。
第二步:把后台的网站地址改成 https
登录 Z-BlogPHP 后台(默认入口 /zb_system/admin/,以 1.7.3 版本为例),点左侧菜单「网站设置」→「全局设置」→「基础设置」。
找到「网站地址」,把 http://你的域名 改成 https://你的域名;下面的「固定网站域名」建议打开,开启后所有页面都会按这个域名生成链接。
保存后回到首页,按 Ctrl+F5 强制刷新。如果报错减少了一半,说明生效了。
第三步:批量替换数据库里残留的旧链接
后台改的是「以后生成」的链接,历史文章正文里已经写死的 http:// 图片地址不会自动变。
登录 phpMyAdmin(宝塔面板在「数据库」里点「管理」),左侧选中你的 Z-BlogPHP 数据库,点顶部「SQL」标签页,粘贴执行(把域名换成你自己的,表前缀按实际改):
UPDATE zbp_post SET log_Content = REPLACE(log_Content,'http://www.example.com','https://www.example.com');
UPDATE zbp_post SET log_Intro = REPLACE(log_Intro,'http://www.example.com','https://www.example.com');
UPDATE zbp_config SET conf_Value = REPLACE(conf_Value,'http://www.example.com','https://www.example.com');
zbp_post 存文章(正文是 log_Content、摘要是 log_Intro),zbp_config 存主题和插件的配置项,主题里设置的 logo、横幅图地址通常就在这儿。
注意:执行 SQL 前先在 phpMyAdmin 里点「导出」备份整库;表前缀不一定是
zbp_,去/zb_users/c_option.php里看ZC_DATABASE_PREFIX的值。
第四步:处理模板和模块里写死的 http 链接
还有一部分链接既不在数据库也不在后台设置里,而是直接写死在文件中。
后台进「模块管理」,逐个编辑侧栏、导航栏里的「自定义 HTML」模块,把里面的 http:// 改成 https:// 或用 // 开头的协议相对写法。
模板文件则通过 FTP 或宝塔「文件」管理器进入 /zb_users/theme/你的主题目录名/,在文件搜索框里搜索 http://,找到后改掉;插件目录 /zb_users/plugin/ 同样搜一遍。
注意:改主题文件前先整目录备份,主题一升级你的修改会被覆盖,能通过后台配置解决的就别改文件。
第五步:处理反代或 CDN 导致程序判断不出 HTTPS
如果走的是 Nginx 反代、宝塔面板或 CDN,PHP 拿到的 $_SERVER['HTTPS'] 可能是空的,Z-BlogPHP 会以为自己在 http 环境,生成出来的链接又变成 http。
宝塔用户进「网站」→ 对应站点「设置」→「配置文件」,在 location ~ \.php 段里加上一行:
fastcgi_param HTTPS on;
用 CDN 回源的,在回源请求头里加 X-Forwarded-Proto: https。保存后重载 Nginx。
第六步:清缓存并复查
回到后台,点「清空缓存并重新编译模板」,再清一次浏览器缓存。
重新打开页面按 F12 看 Console,确认没有新的 Mixed Content 提示,地址栏出现锁形图标。想更保险可以把域名丢进 whynopadlock.com 这类在线检测工具跑一遍。
小结
- 后台「网站设置 → 全局设置 → 基础设置」改网站地址并固定域名,是第一步。
- 数据库用
UPDATE ... REPLACE洗zbp_post.log_Content、log_Intro和zbp_config.conf_Value,执行前必须备份。 - 主题目录和「自定义 HTML」模块里写死的 http 链接要手动搜一遍。
- 有反向代理或 CDN 时,加
fastcgi_param HTTPS on;,否则程序判断不出 HTTPS。 - 最后清缓存、看 F12 控制台和地址栏锁形图标确认修复。
原文链接:https://www.gj0.com/thread-818.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。