把同一 URL 在四种状态下各取一份响应并逐项对比:未登录桌面、已登录桌面、未登录移动、已登录移动。若登录状态改变内容而设备不改变内容,问题在缓存或权限;若设备改变内容而登录状态不改变,问题在主题响应式输出或重定向规则。WordPress主机迁移后这类差异通常来自对象缓存、页面缓存插件、CDN 边缘缓存或登录 Cookie 的绕过逻辑,而不是域名解析本身。
直接刷新页面无法区分是缓存还是权限,因为两次请求可能命中同一缓存副本。你需要让每次请求的差异可归因,因此先固定以下变量:同一 URL(含协议与末尾斜杠)、同一网络出口、同一时间窗口、同一份 Cookie 状态。然后按四种组合各请求一次,把响应保存为本地文件。
保存时记录三项:HTTP 状态码、Content-Length 或响应体字节数、响应头中的 Cache-Control、Vary、X-Cache 一类字段。字节数相同不代表内容相同,但字节数不同几乎一定意味着走了不同分支,这就是下一步的入口。
四份样本拿到后,先看 Vary 头。如果未登录与已登录返回不同内容,但响应头里没有 Vary: Cookie,说明缓存层把登录用户和访客当成同一种请求处理,登录态内容可能被写进了公共缓存。迁移后常见的原因是源站地址变了,缓存插件的 Cookie 白名单或绕过规则仍指向旧域名,导致规则失效。
再看缓存命中标记。假设某主机迁移后,未登录桌面返回的响应带边缘缓存命中标记,而已登录桌面返回的是源站直出,那么可以判断:登录请求绕过了缓存,访客请求被缓存。两者内容不同属于预期行为,真正要确认的是访客版本里有没有混入只应给登录用户的内容。
如果设备之间内容不同而登录状态不影响结果,问题通常不在缓存,而在主题或插件的移动识别。检查是否有插件根据 UA 输出不同菜单、不同推荐位或不同跳转地址。迁移过程中若站点地址从旧域名换成新域名,硬编码在主题里的移动跳转目标可能仍指向旧地址,于是移动端被送到一个内容不同的页面。
选一个迁移前就存在、且包含登录可见内容的页面作为对象,例如带用户信息区块的账户页或带权限提示的文章页。按上一步的四种组合请求后,比较可见文本的差异位置:
这里有一个常见误判:看到未登录样本返回了正确内容,就认为缓存没问题。实际上缓存可能只是尚未写入,下一次请求才会暴露差异。所以每份样本至少请求两次,间隔几分钟,观察第二次是否与第一次一致。若第一次与第二次不同,说明缓存正在写入或失效过程中,此时任何单次对照都不可靠。
定位到原因后,执行对应动作,然后用完全相同的四种组合再请求一次。动作与预期结果要一一对应:清空页面缓存和对象缓存后,未登录样本应不再包含登录专属内容;修正 Cookie 绕过规则后,已登录样本应始终绕过缓存;修正移动跳转配置后,移动 UA 请求应返回与桌面同源的正文。
如果清理后差异仍在,不要继续重复清理。改为记录每次请求的响应头,比较清理前后的 Cache-Control 和缓存标记是否变化。若响应头没有变化,说明你的清理动作没有作用到实际提供响应的那一层,可能是 CDN 边缘缓存或主机侧缓存,而不是 WordPress 插件缓存。这个判断会直接决定下一步该去哪个控制面板操作。
主机迁移会改变源站 IP 和可能的上游缓存路径,因此有两项容易遗漏。第一,旧主机的缓存可能仍在为部分请求提供响应,尤其是 DNS 尚未完全切换或存在多级代理时。对照时若发现同一 URL 在不同请求间返回不同源站特征,应先确认解析是否已全部指向新主机,再谈缓存规则。
第二,登录 Cookie 的域和作用域在迁移后可能不匹配。如果 Cookie 仍绑定旧域名,新域名下的登录态可能无法被正确识别,于是已登录请求被当作访客处理,返回访客内容。这种情况下四份样本里“已登录”的两份实际上并未携带有效登录态,对照结论会完全失真。验证方法是检查请求中实际发送的 Cookie 列表,而不是假设浏览器里登录了就一定带上了正确 Cookie。
完成以上对照与复测后,你得到的不只是“内容不一样”这个现象,而是一条可复查的因果链:哪种请求命中哪一层缓存、哪条规则决定了分支、清理动作是否作用到了正确的层。这条链决定了后续是继续调整缓存规则,还是转向模板与跳转配置。