如何解决WordPress页面不存在时的302重定向,配置正常404页面?
嘿,我来帮你捋捋这个棘手的302重定向问题——既然你已经通过remove_action('template_redirect', 'redirect_canonical');干掉了之前的双重重定向,现在还剩302跳转到带/in...的地址再到404,咱们得从其他潜在根源入手排查:
先查自定义重定向插件/代码:
很多时候是Redirection、Yoast SEO这类插件里的规则在搞鬼。去插件的重定向管理界面,搜一下包含/in的路径,看看有没有自动生成或者手动添加的302规则。另外再检查下functions.php里有没有其他自定义重定向代码,比如带wp_redirect()或者add_action('template_redirect', ...)的片段,说不定是之前的遗留代码没清干净。再仔细核对.htaccess和Apache配置:
虽然你说已经检查过,但可以重点看这几个点:- 有没有
RewriteRule规则里带[R=302]且目标是/in...的? ErrorDocument 404的设置是不是指向了某个会被重定向的页面?比如如果把404指向了/404-page,但这个页面又被规则跳转到/in...就会出问题。- 虚拟主机配置里有没有类似的重定向或错误页规则?
- 有没有
排查WordPress固定链接和内容结构:
试试暂时把固定链接改成默认的?p=ID格式,测试下302还会不会出现。如果消失了,说明是自定义固定链接结构导致的——比如你的结构里包含/in前缀,不存在的路径被错误解析成了某个自定义帖子类型的归档页,触发了重定向。另外也检查下有没有已删除的页面、自定义帖子类型的slug是in开头的,WordPress可能在尝试“纠正”路径。主题和插件冲突排查:
这是最容易忽略的点:先切换到WordPress默认主题(比如Twenty Twenty-Four),测试404页面;如果问题消失,就是主题的锅,去主题的functions.php或者模板文件里找重定向代码。如果主题没问题,就逐个禁用插件,每次禁用后测试,找到那个触发302的插件。用日志追踪重定向来源:
如果上面的方法都没找到,就加一段代码到functions.php里,追踪触发302的函数:add_action('wp_redirect', function($location, $status) { if ($status == 302 && strpos($location, '/in') !== false) { // 把重定向信息写入服务器错误日志 error_log('302 Redirect Triggered: Target = ' . $location . ' | Trace: ' . print_r(debug_backtrace(), true)); } return $location; }, 10, 2);然后访问一个不存在的页面触发404,去服务器的error log里找对应的日志条目,里面的堆栈信息会告诉你是哪个插件/函数触发的重定向,精准定位问题。
内容的提问来源于stack exchange,提问作者Robert Taussig

