WordPress配置分页rewrite rule后出现原始URL后缀重复如何解决
问题原因
你目前只配置了「让WordPress识别seite-x格式的分页URL」的入站解析规则,缺失了三项核心配置:
- 没有拦截WordPress默认的规范URL重定向逻辑:WordPress核心自带的
redirect_canonical机制会自动将它识别为“非标准”的分页路径,重定向到默认带/page/x后缀的格式,最终就出现了两个分页后缀拼接的问题 - 现有重写规则的正则匹配有缺陷:
([0-9])仅能匹配1-9的单数字分页,超过第9页的内容无法正常识别 - 没有修改WordPress生成分页链接的默认逻辑,即便访问正常,WP输出的分页链接还是会自带默认
/page/x后缀
完整修复配置
把你现有配置替换成以下代码,添加到主题functions.php或者自定义插件中即可:
// 1. 注册自定义分页重写规则 add_action('init', function () { // 修正正则匹配多位数分页,末尾加$匹配路径结束,避免被其他规则追加内容 add_rewrite_rule( '([^/]+)/seite-([0-9]+)$', 'index.php?taxonomy=rubrik&term=$matches[1]&post_type=beitrag&paged=$matches[2]', 'top' ); }); // 2. 拦截默认的规范重定向,避免自定义分页URL被拼接默认/page后缀 add_filter('redirect_canonical', function ($redirect_url, $requested_url) { // 当是rubrik分类法+beitrag文章类型的分页请求时,取消默认重定向 if (get_query_var('taxonomy') === 'rubrik' && get_query_var('post_type') === 'beitrag' && get_query_var('paged') > 0) { return false; } return $redirect_url; }, 10, 2); // 3. 修改该类存档的分页链接输出格式,直接生成seite-x格式的链接 add_filter('paginate_links', function ($link) { global $wp_query; if (is_tax('rubrik') && get_query_var('post_type') === 'beitrag') { // 把默认的/page/(\d+)替换成seite-$1 $link = preg_replace('#/page/([0-9]+)#i', '/seite-$1', $link); } return $link; });
配置完成后记得进入WordPress后台「设置 - 固定链接」,点击保存(不需要修改内容)刷新重写规则缓存即可生效。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

