WordPress具有一项功能,如果认为URL书写错误,它将自动重定向您的URL。这是一个示例:我有一个名为my-page的页面

如果我转到:

www.mysite.com/something/my-page/


,它将立即将我重定向到

www.mysite.com/my-page/


,因为第一个URL不存在任何内容。

如何关闭此功能,而如果输入的URL不正确,则只能获取404?

评论

如果您看到正在发生的事情(通过HttpFox或WireShark或类似的数据包嗅探器),则这些页面将重定向为301状态-永久移动-这是适当的行为。它不仅可以帮助搜索引擎使数据库保持最新状态,而且重定向还可以帮助用户查找页面。当您实际移动页面或更改固定链接时,这可能会影响WordPress处理事情的方式,因此请当心。无论如何,您可以选择,但我不确定这是个好主意。

我知道这是一件好事,我确实明白这一点。但是,我有一个特殊的用例,不需要使用这种行为。我正在开发一个用于处理URL重定向的插件,因此我想覆盖该行为。

这是一个更正确的答案:link

#1 楼

这对我有用:

remove_action('template_redirect', 'redirect_canonical');


评论


您能指导我做什么吗?什么是规范重定向?我是Wordpress的新手

–亚丁薄雾
2014-09-25 7:50

您为我省了很多麻烦!谢谢 ! :-D

–詹斯基
16-2-26在10:34

没有地方可以看到这些重定向,以便我们可以一一删除它们。

– Shane Jones
17-2-22在13:50

这很棒。您知道为什么使用此后wp-admin可能仍会重定向吗?

– Gezim
18年2月3日,13:56

您可以在dev4press.com/blog/wordpress/2015/…中找到有关此问题的详细说明。

–ronnefeldt
19年1月14日下午5:33

#2 楼

正如Ash所建议的那样,您可以使用以下代码关闭该功能:

remove_action('template_redirect', 'redirect_canonical');


在canonical.php中查看redirect_canonical函数时,您似乎也可以使用您自己的过滤器修改行为。

redirect_canonical()函数的结尾,有一个过滤最终答案的调用:

$redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url );


所以您可以编写您的自己的过滤器可根据输入修改最终的重定向或返回null以停止重定向,从而关闭特定URL或URL子集的功能。

评论


该SO显示了有关如何为像我这样对WP有点陌生的人添加过滤器的更多详细信息

–PBMe_HikeIt
20年1月30日在21:22

#3 楼

您可以通过在代码中的某处(例如functions.php中)添加以下行来禁用404的永久链接猜测,而无需禁用规范URL的重定向:
add_filter('do_redirect_guess_404_permalink', '__return_false');

Wordpress代码中的相关功能是redirect_canonicalredirect_guess_404_permalink中的wp-includes/canonical.php

评论


有趣的是,文档似乎已过时,因为它说redirect_canonical同时适用于TLD级重定向和404错误重定向...

–杰西·尼克尔斯(Jesse Nickles)
20/09/24 '16:23

@JesseNickles,是的,如果页面是404,则redirect_canonical会调用redirect_guess_404_permalink,但它也会执行其他重定向。

–伊恩·麦金农
20/09/24在17:50