You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress add_rewrite_rule()导致compare页面带字符URL返回404错误求助

问题分析与解决方案

你遇到404的核心原因是当前的重写规则只匹配数字路径,但你访问的compare/aa-bb-cc-dd包含字母和横杠,完全不符合规则里的正则表达式,所以WordPress无法匹配到对应的页面,返回404错误。

具体问题拆解

你写的正则^compare/([0-9]+)/?中,[0-9]+表示只匹配1个或多个数字字符,而aa-bb-cc-dd包含字母(a-z)和横杠(-),根本不在匹配范围内,所以规则不会触发。

修复步骤

  1. 修改正则表达式,匹配目标路径格式
    将正则改为能匹配字母、数字、横杠的组合,替换后的代码如下:

    add_action( 'init', 'custom_rewrite_rules');
    function custom_rewrite_rules() {
        // 匹配字母、数字、横杠的任意组合
        add_rewrite_rule('^compare/([a-zA-Z0-9-]+)/?', 'index.php?page_id=250', 'top');
        // 重要提示:不要把flush_rewrite_rules()放在init钩子中!
        // 每次页面加载都执行会严重影响性能,建议只在首次修改后临时调用一次,
        // 之后注释掉,或者直接去后台刷新规则
        // flush_rewrite_rules();
    }
    
  2. 刷新重写规则
    修改代码后,必须刷新WordPress的重写规则才能生效:

    • 登录WordPress后台,进入「设置」→「固定链接」
    • 不需要修改任何设置,直接点击「保存更改」按钮即可完成规则刷新

进阶优化(可选)

如果你需要在compare页面中获取aa-bb-cc-dd这个路径参数,可以添加query var支持,代码示例:

// 注册自定义query var
add_filter('query_vars', 'custom_compare_query_vars');
function custom_compare_query_vars($vars) {
    $vars[] = 'compare_slug';
    return $vars;
}

// 修改重写规则,传递参数
add_action( 'init', 'custom_rewrite_rules');
function custom_rewrite_rules() {
    add_rewrite_rule('^compare/([a-zA-Z0-9-]+)/?', 'index.php?page_id=250&compare_slug=$matches[1]', 'top');
}

之后在compare页面的模板文件中,就可以用get_query_var('compare_slug')获取到aa-bb-cc-dd这个值,用于后续业务逻辑处理。

内容的提问来源于stack exchange,提问作者NewUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:16:51