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

时间:2014-05-20 作者:Hauke P.

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

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

而我希望wordpress能够将URL转换为一个明确定义的页面(例如,likehttp://myblog.com/?p=123)转换为规范形式,我只想对可能指向多个页面的“不清楚”URL禁用URL自动完成。

我的问题是:我如何才能做到这一点?

我也做了一些研究。。。

公认的问题答案Disable Wordpress URL auto complete禁用整个规范URL系统。这对我来说是不可接受的。

大约四年前,Wordpress bug追踪器上出现了这样的东西:https://core.trac.wordpress.org/ticket/8948 虽然有一些很好的解决方案(比如提供一个页面“我们没有找到您的URL。但是您是否正在寻找以下页面之一?”)在那里进行了讨论,票最终被关闭了。

  • EDIT: 实际上,在https://core.trac.wordpress.org/ticket/16557 这正好满足了我的需要。它似乎是4.0版本的目标。票证评论还包含一个解决方案(见下文)。

  • 2 个回复
    最合适的回答,由SO网友:Hauke P. 整理而成

    Updated Answer (2020-10-29):

    Wordpress 5.5更改了解决方案。保留旧答案供下文参考。

    Short version: 从这里获取我的pluign:https://wordpress.org/plugins/disable-url-autocorrect-guessing/

    Long Version:

    使用Wordpress 5.5,您可以更精确地控制猜测是否应该/如何进行。提到https://make.wordpress.org/core/2020/06/26/wordpress-5-5-better-fine-grained-control-of-redirect_guess_404_permalink/ 了解更多信息。要完全禁用猜测,请使用以下代码:

    add_filter( \'do_redirect_guess_404_permalink\', \'__return_false\' );
    
    如果您将其添加到一个新的插件php文件中(例如在wp-content/plugins/disable-url-autocorrect-gussing.php中),您将有一个很好的插件,可以激活它来禁用Wordpress的“autocorrect”;猜测“;特色

    为了省去你这么做的麻烦,我更新了我的插件;版本2.0现在使用此oneliner。您可以从以下位置获取插件:https://wordpress.org/plugins/disable-url-autocorrect-guessing/

    <小时/>

    Old answer (before 2020-10-29):

    好的,在进一步搜索之后,我终于找到了我自己问题的答案,隐藏在这个功能请求单的评论中: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-gussing.php中),您将有一个很好的插件,可以激活它来禁用Wordpress的“autocorrect”;猜测“;特色

    为了省去你的麻烦,我确实这样做了,并在Wordpress上交了我的插件。组织。在那里查看后,您应该可以在此处下载:https://wordpress.org/plugins/disable-url-autocorrect-guessing/

    虽然这是一个可行的解决方案,但建议的代码有点像黑客。一旦功能请求进入https://core.trac.wordpress.org/ticket/16557 如果真的实现了,就会有更好的解决方案,并且可以更好地控制猜测的实际执行方式。

    SO网友:Rarst

    不幸地redirect_canonical() 是400多行代码(并且从一个版本到另一个版本不断增长),它的结构并不特别受目的的控制。不能灵活配置的是要么全有要么全无的交易。

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

    手动处理重定向,位于template_redirect.redirect_canonical 如果它提出的目标不可取,就钩住它

    结束

    相关推荐

    301 Redirect To Post ID

    我有一个现有的基于asp的博客,其中所有帖子的URL中都包含帖子id(template_permalink.asp?id=123).</我有一个空白的WordPress博客。我将不得不手动重新创建所有帖子,因为我现有博客的提要不包含原始图像(它只有一个CDATA块),所以我无法导入它们</我需要将原来的帖子重定向到它们对应的WordPress帖子我尝试过:转到301重定向全部template_permalink.asp?id=xxx 使用htaccess将URL链接到帖子id,但它保留了原始i