站点证书装好、访问地址也换成 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,而不是反复折腾证书。