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

WordPress自定义重写规则传递变量失效问题求助

解决WordPress custom_rewrite_rule传递变量异常的问题

我一眼就看出问题出在你重写规则的目标路径写法上——WordPress的custom_rewrite_rule函数里,目标路径的变量引用不能用PHP的$matches[1]、$matches[2],因为这里的规则是传递给服务器(Apache/Nginx)的重写引擎使用的,得用服务器重写语法里的反向引用符号$1、$2。

修正后的代码

把你子主题functions.php里的代码改成这样:

function custom_rewrite_rule() {
    add_rewrite_rule(
        '^yacht-details/([^/]*)/([^/]*)/?$',
        'yacht-details.php?info=$1&boatid=$2',
        'top'
    );
}
add_action('init', 'custom_rewrite_rule', 10, 0);

关键说明

  • 反向引用的正确用法:$1对应正则表达式里第一个括号([^/]*)匹配到的内容,$2对应第二个括号的内容,这是服务器重写规则的标准语法,不是PHP变量。
  • 必须刷新重写规则:修改完代码后,你需要到WordPress后台的「设置」→「固定链接」页面,随便切换一个不同的固定链接结构(比如从「文章名」改成「日期和名称」),然后点击「保存更改」,这样WordPress才会更新重写规则缓存,让新规则生效。
  • 外部PHP文件的获取逻辑没问题:你在yacht-details.php里用$_GET["info"]和$_GET["boatid"]获取变量的代码是正确的,只要重写规则生效,就能拿到实际的变量值了。

关于.htaccess的替代方案

其实完全不需要改用.htaccess,WordPress的重写系统已经能很好处理这个场景。之前你遇到的多子目录不兼容问题,大概率是.htaccess里的规则写法不符合WordPress的重写优先级导致的,用custom_rewrite_rule的方式更符合WordPress的规范,也更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:13