先把当时的情况摆出来。文章里嵌入的视频地址还是 http,页面整体是 https,浏览器把视频拦了下来,只显示一块空白。
这类报错背后常见的原因有几处,逐个排除就行。旧文章里的嵌入代码没有更新。还有一种是编辑器默认插入了 http 地址。
另外,数据库里存着迁移前的资源链接。
扫描页面里的 http iframe
curl -s https://www.example.com/a/ | grep -o 'http://www.youtube[^"]*'
批量替换成 https
UPDATE wp_posts SET post_content=REPLACE(post_content,'http://www.youtube','https://www.youtube');
剩下的就是确认视频能正常加载
curl -sI https://www.youtube.com/embed/xxx | head -1
命令输出我都留了记录,免得改完记不清原来的值。
改之前先确认了最近有没有人动过配置,避免白查一遍。
怎么算真的好了,看的是同一批现象。视频正常显示,混合内容警告消失,页面停留时间回升。
提醒一点。只改主站协议不改嵌入代码,是升级 https 后最常见的遗留问题,老文章越多越容易漏。批量替换前先导出文章表,替换语句里的域名要写完整,改完再扫一遍源码确认。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。