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

如何让WordPress重写规则匹配含查询参数的URL并保留参数?

解决WordPress重写规则无法匹配带查询参数URL的问题

问题原因

Apache的mod_rewrite在匹配规则时,只会检查URL的路径部分(即?之前的内容),你的原规则本身可以匹配带查询参数的请求,但可能因为未刷新重写规则、或者需要明确强制追加查询参数导致问题。

解决方案

方案1:确保重写规则生效并利用默认的查询参数保留机制

你的原规则本身是正确的,只需确保WordPress加载了最新的重写规则:

  1. 保留原有的代码:
add_rewrite_tag('%c%', '([^&]+)');
add_rewrite_rule('^blog/([a-z0-9-]+)[/]?', 'index.php?pagename=blog&c=$matches[1]', 'top');
  1. 登录WordPress后台,进入设置 > 固定链接
  2. 无需修改任何设置,直接点击「保存更改」按钮,触发重写规则刷新

此时,当访问https://example.com/blog/category?utm_campaign=web时,WordPress会自动将原查询参数追加到目标URL中,最终请求的是index.php?pagename=blog&c=category&utm_campaign=web

方案2:强制添加QSA标志(确保查询参数被追加)

如果方案1无效,可以通过钩子添加带有QSA(Query String Append)标志的规则,强制Apache保留原查询参数:

add_rewrite_tag('%c%', '([^&]+)');

function add_custom_rewrite_with_qsa() {
    global $wp_rewrite;
    // 将自定义规则放在规则列表最顶部,确保优先匹配
    $wp_rewrite->rules = array(
        '^blog/([a-z0-9-]+)[/]?$' => $wp_rewrite->index . '?pagename=blog&c=$matches[1] [QSA,L]'
    ) + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_custom_rewrite_with_qsa');

同样,添加代码后需要进入后台固定链接页面保存更改,刷新规则。

验证方法

访问带查询参数的URL后,可以通过以下方式验证参数是否被保留:

  1. 在你的blog页面模板中添加代码:
var_dump($_GET);
  1. 访问https://example.com/blog/category?utm_campaign=web,查看输出是否包含c=category和utm_campaign=web两个参数。

内容的提问来源于stack exchange,提问作者Ibrahim Azhar Armar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:25:40