站点证书装好、访问地址也换成 https 了,可图片还是加载不出来,浏览器控制台刷出一片 Mixed Content 警告。多数人第一反应是重装证书,其实证书往往没问题,是页面里还写着 http 的绝对地址。

这些地址的来源很集中:早期在编辑器里粘贴图片时,站点还只有 http,编辑器把带域名的完整链接写进了正文;换成 https 之后,新上传的图片是 https,老文章里的引用却原地不动,于是同一篇文章里两种协议混着用。

第一步:确认残留规模

先备份数据库,再用 wp-cli 查一下正文里还有多少条 http 链接:

wp db query "SELECT COUNT(*) FROM wp_posts
WHERE post_content LIKE '%http://你的域名%';"

返回 0 说明正文干净,问题多半出在特色图片、小工具或主题选项里;数字上千就直接做批量替换。

第二步:dry-run 之后再替换

wp search-replace 会顺带处理序列化数据,比手工写 UPDATE 安全:

wp search-replace 'http://你的域名' \
'https://你的域名' --all-tables --precise --dry-run

dry-run 只报告不落库,确认影响条数和预期一致,去掉这个参数再跑一次。跑完一定要清缓存,否则前台看到的还是旧地址。

第三步:加一条兜底响应头

替换后仍有零星外链图片报错,可以在站点配置里让浏览器自动升级请求:

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

重载配置后强刷页面,控制台应该只剩第三方域名自己的告警。

第四步:逐项验收

  • curl -I 首页返回 200,且没有 Location 跳回 http
  • 查看网页源码搜索 http://你的域名,命中数为 0
  • 手机端打开带图文章,图片正常显示且页面不左右晃动

四步做完,小锁旁边的感叹号基本会消失。若警告仍在,优先怀疑 CDN 的回源地址没有同步改成 https,而不是反复折腾证书。

作者 9823189

发表回复