为什么WordPress不能处理Site.com/%postname%/某个单词?赠送404

时间:2015-06-07 作者:Debajyoti Das

我注意到我使用/%post_id%/%postname% 由于任何错误等sitename.com/123/wrong-words?some=params&etc=etc 被重定向到正确的帖子。

但是sitename.com/123/correct-full-postname/somemistakeword 生成404。

为什么Wordpress无法处理此问题/somemistakeword ? 或者为什么在我添加/postname url.

有没有办法解决这个问题?

Edit: 这似乎是我测试的所有wordpress设置中的默认设置。

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

之后的一切? 被视为查询字符串的一部分。之前的一切? 是相当永久的规则的一部分,也就是重写规则。

然后处理重写规则以生成查询变量。然后将它们插入查询(为主循环供电),并基于此查询加载模板。

? 在URL中可以用来添加新的查询变量,或者只是简单地获取变量。

所以sitename.com/123/wrong-words?some=params&etc=etc 实际上只是sitename.com/123/wrong-words 就重写规则系统而言。重写规则也由正则表达式支持,用于匹配博客文章的正则表达式取决于您的永久链接的配置方式。

因此,从sitename.com/123/correct-full-postnamesitename.com/123/correct-full-postname/somemistakeword/, 因为唯一的区别是斜杠,所以它们被认为是等价的。也可能会对URL进行一些处理,并且有一个规范的URL重定向例程,该例程非常复杂,在WP Core中范围很大。

至于为什么sitename.com/123/correct-full-postname/somemistakeword 不重定向到sitename.com/123/correct-full-postname, 这是因为他们不一样,在sitename.com/123/correct-full-postname/somemistakeword. 有重写规则sitename.com/123/correct-full-postname/2 又名该帖子的第2页,以及其他特定端点,如sitename.com/123/correct-full-postname/feed

但如果我们实现了这样一个功能,它就不会那么简单了,例如,如果我们访问此页面会发生什么:

sitename.com/parentpage/childpage

它会:

显示子页面将您重定向到父页面作为旁注,我的博客位于:

http://tomjn.com/2015/05/07/escaping-the-unsecure/

如果删除尾部斜杠,它将重定向到带有尾部斜杠的版本。如果我在末尾附加随机字符,我会得到一个404

SO网友:Dave Lozier

如果没有看到您当前所有的重写规则,我不能肯定,但您可以使用以下插件检查它们:(为我在4.2.2上工作)

https://wordpress.org/plugins/monkeyman-rewrite-analyzer/

我的猜测是,您的重写规则指示Wordpress查找不存在的名为“somemistakeword”的页面。重写分析器将让您深入了解Wordpress实际看到的内容。

您可以添加新的重写规则来覆盖您的用例。https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

不过,可能有一两个插件可以让操作更简单。

我希望这有帮助。

结束

相关推荐

Dynamic Custom Permalinks

我有一个场景,其目的是创建可以动态更改的自定义永久链接,例如:如果显示国家信息,则URL应为http://example.com/country-information如果显示特定国家的城市信息,则URL应如下所示http://example.com/country/city-information. 我怎样才能做到这一点?