一点背景知识,我们管理着一个由 25 个不同的 WP 站点组成的网络,这些站点都运行相同的代码库。最近我们有一位 SEO 分析师加入,他注意到一些网站存在奇怪的 404 问题,如下所示:
**/category/featured-article/ryan-mcnamara-new-different/news/page/2/**
所以我禁用了所有插件和钩子,尝试全新安装,但这些东西仍在发生。事实证明,只有网站的永久链接结构以 .html 结尾。所以我深入研究了重写代码,结果发现这就是 URL 发生的事情:**/category/featured-article/ryan-mcnamara-new-different/news**
- 如果永久链接结构是
**/%category%/%postname%/**
, 则可用的重写规则 ($wp_rewrite->rewrite_rules()
) 则匹配此规则:**(.+?)/([^/]+)(/[0-9]+)?/?$**
,如预期的那样导致 404。 - 如果永久链接结构是
**/%category%/%postname%.html**
,则匹配此规则:**(.+?)/?$**
,映射到**index.php?category_name=$matches[1]**
,因此呈现类别的原因 当用户/机器人找到这些类别页面并单击他们被带到的分页链接时**/category/featured-article/ryan-mcnamara-new-different/news/page/2/**
,会导致 404。
第一个问题是人们如何首先找到这些页面,这是我可以处理的问题。这个论坛的问题是这是 WP 默认重写的错误,或者 paginate_links 函数是否应该更聪明地创建分页 URL?有没有人见过这个问题?
警告:不,我不能强制所有网站删除 .html,不,我没有能力为这个问题更改核心 WP 代码