编辑用预览地址检查排版,十分钟后匿名访客打开同一个 URL 也能看到全文,响应头里 x-cache 是 HIT,文章状态还是 draft。日志里能对上时间点,这种反而好排。
缓存插件把带 preview 参数的请求也纳入了缓存键,预览响应被存成公开页面。后续请求直接命中,权限判断根本没执行。这一点先确认清楚,后面就不用反复试。
curl -sI 'https://example.com/?p=903&preview=true' | findstr /i "HTTP/ x-cache set-cookie" wp cache flush
「草稿页缓存」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
处理上按这个顺序:在缓存配置里排除 preview、preview_id 等参数;登录态和带 nonce 的请求一律不缓存;已经写入的缓存按 URL 立即清除;用无痕窗口访问预览地址,确认返回 403 或登录页。
结果对不对很好判断,匿名访问预览地址不再返回正文,x-cache 显示 MISS 或 BYPASS。
