赞片CMShttps混合内容

域名注册
域名注册 初级会员超兽战士 👑年卡会员
发布于 2026-10-08 22:21 ·1 浏览 ·0 回复

照着做完这篇,你能把赞片CMS站点从"HTTPS 挂锁但页面一堆资源加载失败"的状态,修成浏览器地址栏干干净净、控制台没有 Mixed Content 警告的状态。

混合内容(Mixed Content)的本质很简单:页面本身是 https:// 打开的,但里面还引用着 http:// 的资源。浏览器为了安全,会把图片、CSS、JS 这类"被动内容"拦掉,把 iframe、XHR、播放地址这类"主动内容"直接阻断,表现就是图片裂开、样式错乱、播放器转圈。

第一步:先用浏览器确认到底坏了什么

打开你的站点首页和任意一部影片详情页,按 F12 打开开发者工具,切到 Console 面板。

你会看到类似这样的红字:

Mixed Content: The page at 'https://你的域名/' was loaded over HTTPS,
but requested an insecure image 'http://你的域名/uploads/xxx.jpg'.
This request has been blocked.

记下被拦的域名和路径。再看 Network 面板,点一下 Protocol 列(没有的话右键表头勾上),凡是显示 http/1.1 的行就是罪魁祸首。

这一步做完,你会拿到一张清单:到底是自己域名下的图挂了,还是第三方图床、还是播放地址挂了。

注意:不要只刷首页就下结论。赞片CMS 的模板通常有首页、列表页、详情页、播放页四套模板,播放页最容易出问题,因为它涉及 m3u8/播放器 JS。

第二步:搞清 http 地址藏在哪三个地方

赞片CMS 里的 http:// 通常来自三处,必须逐个清:

  1. 数据库——采集来的影片数据、封面图地址、配置表里的站点 URL,大多是写死的绝对地址。
  2. 模板文件——template/ 目录下写死的 http:// 图片、CDN、统计代码。
  3. 第三方外链——弹幕、统计、广告联盟、采集接口,这些是别人给的,你改不了。

先在服务器上跑一遍扫描(路径按你实际安装目录改):

cd /www/wwwroot/你的域名
grep -rn "http://" template/ | grep -v "https://" | head -50

这一步的结果会告诉你模板里有多少处需要手工改。

第三步:批量替换数据库里的 http

先进 phpMyAdmin 或命令行 mysql -u用户 -p,选你的赞片CMS数据库。

先查再改,别直接下手:

SELECT COUNT(*) FROM 影片表名 WHERE 封面字段 LIKE 'http://%';

确认数量对得上,再执行替换:

UPDATE vod SET vod_pic = REPLACE(vod_pic, 'http://', 'https://') WHERE vod_pic LIKE 'http://%';

赞片CMS 的表名前缀一般是 zanpian_ 开头,影片表多为 vod 系列,具体以 SHOW TABLES; 的结果为准。要改的字段通常有:封面图、缩略图、播放地址、站点配置里的 URL。

注意:替换前务必用 phpMyAdmin 的导出功能备份整库。REPLACE 是不可逆的,一旦把别的 http:// 也换掉,比如某些必须走 http 的老接口,就只能靠备份回滚。

改完清一次缓存(赞片CMS后台一般有「系统 → 缓存管理 → 清除缓存」这类入口,版本不同叫法略有差异)。

第四步:改模板里写死的 http

模板文件用 sed 批量替换,但要排除掉那些必须保留 http 的第三方地址:

sed -i 's|http://你的域名|https://你的域名|g' template/*/*.html
sed -i 's|http://cdn.你的域名|https://cdn.你的域名|g' template/*/*.html

只替换你自己的域名,别用 s|http://|https://|g 这种全局替换——那会把统计代码、采集接口一起改坏。

改完去后台再清一次模板缓存,或者直接删 runtime/、cache/ 下的编译文件。

注意:如果你的图片存在第三方图床或对象存储上,光改页面没用,得去图床控制台开启 HTTPS 访问,再把域名换过去。很多老图床默认只有 http,这是最容易卡住的一环。

第五步:用 CSP 兜底,但别指望它解决全部

在 Nginx 站点的 server 块里加一行:

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

然后 nginx -t && nginx -s reload。

这行的作用是:浏览器遇到 http 资源时自动尝试用 https 再请求一次。

注意:它只能救"同一个域名且确实支持 https"的资源。如果对方服务器根本没有证书,升级请求照样失败。而且它救不了 iframe 和 XHR 这类主动内容。所以这行是兜底,不是替代方案。

小结

  • 先用 F12 的 Console 和 Network 面板列出所有被拦的 http 资源,别瞎改。
  • 三处来源:数据库、模板文件、第三方外链,缺一处都修不干净。
  • 数据库替换前必须导出备份,REPLACE 不可逆。
  • 模板替换只针对自己的域名,不要全局 http:// → https://。
  • 第三方图床、播放器、统计代码要单独去对方后台开 HTTPS。
  • CSP 的 upgrade-insecure-requests 只是兜底,不能替代前面几步。
版权声明:本文来自 GJ站长论坛《赞片CMShttps混合内容》
原文链接:https://www.gj0.com/thread-1225.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~