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

WordPress自定义PHP页面Rewrite规则问题:无法保留URL路径参数

解决WordPress重写规则跳转及自定义变量读取问题

问题根源

你当前的重写规则仅匹配kb/([^/]*)/([^/]*)格式的URL,访问kb/123时规则不生效,WordPress会将其识别为kb页面的无效子路径,触发规范URL(Canonical URL)重定向,自动跳回domain.com/kb/。同时,未注册自定义查询变量,即便规则匹配成功,也无法正常读取category和sequence参数。

分步解决方案

1. 注册自定义查询变量

在主题functions.php或自定义插件中添加代码,告知WordPress允许使用这两个自定义变量:

function register_kb_query_vars($vars) {
    $vars[] = 'category';
    $vars[] = 'sequence';
    return $vars;
}
add_filter('query_vars', 'register_kb_query_vars');

2. 调整重写规则

将重写规则移至主题functions.php或自定义插件中(避免页面加载时机问题),同时兼容目标双参数格式,可选添加单参数规则防止跳转:

function add_kb_rewrite_rules() {
    // 匹配 kb/分类/序号 格式(末尾斜杠可选)
    add_rewrite_rule(
        '^kb/([^/]+)/([^/]+)/?$',
        'index.php?page_id=' . get_page_by_path('kb')->ID . '&category=$matches[1]&sequence=$matches[2]',
        'top'
    );
    // 可选:匹配 kb/单个参数 格式,避免跳转
    add_rewrite_rule(
        '^kb/([^/]+)/?$',
        'index.php?page_id=' . get_page_by_path('kb')->ID . '&category=$matches[1]',
        'top'
    );
}
add_action('init', 'add_kb_rewrite_rules');

注意:改用get_page_by_path('kb')获取页面ID,比直接在页面中用get_the_ID()更可靠,避免上下文错误。

3. 刷新重写规则

登录WordPress后台,进入设置 → 固定链接,无需修改任何设置,直接点击「保存更改」,触发规则刷新,确保新规则写入.htaccess。

4. 在页面中读取变量

在你的kb页面PHP文件中,使用get_query_var()读取自定义变量:

$category = get_query_var('category');
$sequence = get_query_var('sequence');

// 示例使用
if ($category && $sequence) {
    echo "分类:{$category},序号:{$sequence}";
} elseif ($category) {
    echo "分类:{$category}";
}

关键注意事项

  • 重写规则必须在init钩子中添加,确保加载时机正确。
  • 必须注册查询变量,否则WordPress会过滤掉自定义参数。
  • 刷新重写规则是必做步骤,否则新规则不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:00:24