换服务器后,如果同一批URL同时被WordPress固定链接、服务器重写规则和插件或CDN的改写逻辑处理,必须先指定一个“最终裁决者”,其余系统只负责把请求原样交给它。否则你看到的301、404或循环跳转,无法判断是哪一层造成的,也无法稳定修复。下面从最常见的矛盾现象入手,给出两种解释、区分证据和可执行动作。
典型表现是:后台固定链接设置正确,.htaccess或Nginx配置也按教程写好,但首页、文章页正常,带分类、标签、分页或旧域名的URL仍然跳到错误地址,甚至同一篇文章在两次访问中结果不同。此时继续叠加规则通常会让问题更隐蔽,因为多个系统都在“抢着”决定最终URL。
服务器或CDN先命中了重写、跳转或缓存规则,请求在到达index.php之前就被改写或拦截。这种情况下,WordPress里的固定链接设置看起来正确,但对这批URL没有实际作用。
WordPress生成了规范URL,随后被插件、主题过滤器或反向代理层再次替换,常见于旧域名替换、多语言、强制HTTPS或缓存插件。此时问题不在重写规则本身,而在输出阶段。
用一条具体URL做对照,而不是凭感觉判断。假设站点从http://old.example迁到https://new.example,取一个分类分页地址,例如/category/news/page/2/。
Host: new.example,绕过CDN。如果此时返回正常,说明改写主要发生在CDN或代理层。Location,说明至少两个系统都参与了改写。这些证据只能说明请求经过了哪一层,不能单独证明某层“一定是错的”。缓存、浏览器记忆和DNS传播都可能让现象看起来不一致,所以要在同一网络环境下重复验证。
选定一个系统作为URL的最终裁决者,常见有两种成立条件:
index.php,不再做业务级跳转。动作示例:先备份当前规则和数据库,然后把非裁决层的改写规则逐条注释,只保留必要转发。每注释一条,记录目标URL的响应状态和跳转链。如果某条规则移除后问题消失,说明它原本参与了冲突;如果移除后出现404,再判断是缺少映射还是裁决者配置不完整。这个结果会直接决定下一步是补映射,还是继续清理其他改写层,而不是盲目恢复全部规则。
robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录;HTTPS同样不保证安全无漏洞或排名。若旧域名仍有流量,先确认DNS和证书覆盖范围,再决定跳转由哪一层执行。不同搜索引擎对跳转和规范URL的支持情况须分别核查,不能因为一个入口表现正常就推断全部正常。请求量或抓取量归零也不能单独证明处理正确,它可能来自缓存、屏蔽或统计口径变化。
把责任方写进交接文档:谁生成URL、谁只做转发、出现冲突时先查哪一层。这样下次再遇到同类异常,你能从确定的入口开始排查,而不是在多个系统之间反复猜测。