禁用仅URL自动完成功能,而不是整个规范的URL系统


8

我有一个博客,在某些类别的“项目”中有多个页面,其结构/名称如下:

  • / projects / project-2012
  • / projects / project-2013
  • / projects / project-2014
  • / projects / project-2015

当用户输入诸如http://myblog.com/project甚至http://myblog.com/proje之类的URL时,他/她将被重定向到页面/ projects / project-2012。(永久移动301!)

虽然我希望wordpress将导致一个清晰定义的页面(例如,例如http://myblog.com/?p=123)的URL转换为规范形式,但是我只想禁用“自动” URL的URL自动完成功能可能指向几页。

我的问题是:我该怎么做?


我也做了一些研究...

  • 禁用Wordpress URL自动完成问题的可接受答案将 禁用整个规范的URL系统。这对我来说是不可接受的。

  • 大约四年前,类似的事情在Wordpress错误跟踪器中弹出:https : //core.trac.wordpress.org/ticket/8948虽然一些好的解决方案(例如提供页面“我们没有找到您的URL。但是您是也许正在寻找以下页面之一?”)在那里进行了讨论,最后关闭了门票。

  • 编辑:实际上在https://core.trac.wordpress.org/ticket/16557上有一张新票,其中涵盖了我所需要的。它似乎是针对4.0发行版的。票证注释还包含解决方案(请参见下文)。


这个核心的URL猜测功能还与SEO和SEO工具混淆!
Mau

Answers:


11

好的,经过更多搜索之后,我终于在此功能请求通知的注释中隐藏了我自己的问题的答案:https ://core.trac.wordpress.org/ticket/16557 nacin用户建议使用此代码:

function remove_redirect_guess_404_permalink( $redirect_url ) {
    if ( is_404() )
        return false;
    return $redirect_url;
}

add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );

如果将其添加到新的插件php文件中(例如,在wp-content / plugins / disable-url-autocorrect-guessing.php中),您将拥有一个不错的插件,可以激活该插件以禁用Wordpress的自动纠正“猜测”功能。

为了省去您的麻烦,我实际上是这样做的,并将我的插件交给了Wordpress.org。在此进行审核后,您应该可以在此处下载:https : //wordpress.org/plugins/disable-url-autocorrect-guessing/


尽管这是一个可行的解决方案,但建议的代码有些hack。一旦真正实现了https://core.trac.wordpress.org/ticket/16557中的功能请求,就会有更好的解决方案,并且可以更好地控制猜测的实际执行方式。


希望我能
投票

当我在页面重定向中遇到问题时启发了我。我打算去remove_filter()。但是现在只绕开我遇到麻烦的特定情况。以防万一有人对我的问题感兴趣:wordpress.stackexchange.com/questions/307670/…–
Parixit

不再在v5 +中工作
点头(nodws)

@nodws:您指的是什么?我正在将我的插件与5.2.2上的代码段一起使用,但仍然可以正常工作。
Hauke P.19年

哦,这与YOAST的重定向发生冲突
点头

0

不幸的redirect_canonical()是,有超过400行代码(并且随着发行版本的增加而不断增长),这些代码的结构并没有特别地加以控制。不能灵活配置的全部或全部交易。

从实用的角度来看,最佳选择是:

  1. 在处手动处理重定向template_redirect
  2. redirect_canonical不希望将重定向重定向为钩子(如果目标已提出)。

无论哪种情况,您都必须弄清楚究竟什么导致不希望的重定向。


呵呵,那真是非常不幸。:-(我一个不受欢迎的重定向的定义很简单:每一个URL,它解决不了确切一个目标(但多或无)是不可取的,应该产生一个404
Hauke体育

@HaukeP。负责此工作的逻辑是其中的一部分,redirect_guess_404_permalink()并且没有做这样的区分,只需要进行SQL产生的第一个匹配操作即可:(
Rarst 2014年

实际上,我确实找到了自己的解决方案:wordpress.stackexchange.com/a/144970/51898
HaukeP。2014年

@HaukeP。我对“恰好一个目标”误解了一点,因为模糊匹配的某些情况从技术上讲只能解决一个匹配,但这与摆脱模糊的东西大体不同:)
2014年

是的,实际上在写我的最后一条评论时,我停了一秒钟再三考虑,以免被误解。:)因此,看来我应该写出更准确的评论(和问题)。
Hauke P. 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.