WordPress重写规则跳转异常,country参数丢失如何解决?
解决WordPress重写规则自动跳转问题
问题核心原因
出现/directors/usa自动跳转到/directors/的情况,主要是WordPress的规范URL(Canonical URL)机制在起作用——它会默认将非页面标准URL的请求重定向到官方认定的规范地址,同时原重写规则的正则写法和优先级设置也存在问题,导致参数无法被正确识别传递。
具体解决方案
1. 修正重写规则写法及优先级
原规则的.*前缀会导致匹配范围过宽、优先级偏低,改为更精准的正则,并提升规则优先级:
add_action('init', function () { // 注册country重写标签,定义参数格式 add_rewrite_tag('%country%', '([^/]+)', 'country='); // 调整正则匹配逻辑,使用index.php作为跳转目标(WordPress标准写法),并设置top优先级 add_rewrite_rule('^directors/([^/]+)/?$', 'index.php?pagename=directors&country=$matches[1]', 'top'); });
2. 禁用该页面的规范URL跳转
通过过滤器阻止WordPress对directors/{country}格式URL的自动跳转:
add_filter('redirect_canonical', function ($redirect_url, $requested_url) { // 匹配/directors/xxx格式的请求URL if (preg_match('#^/directors/[^/]+/?$#', $requested_url)) { return false; // 禁止自动跳转 } return $redirect_url; }, 10, 2);
3. 刷新固定链接并验证步骤
- 登录WordPress后台,进入「设置」→「固定链接」页面
- 无需修改任何设置,直接点击「保存更改」,确保新的重写规则同步到
.htaccess文件 - 访问
/directors/usa测试,此时应不会再跳转,参数可正常传递
4. 验证参数是否生效
在directors页面的模板文件中添加测试代码,确认参数能正常获取:
$country = get_query_var('country'); if ($country) { echo '当前选中国家:' . esc_html($country); } else { echo '未选择国家'; }
内容的提问来源于stack exchange,提问作者sebastianpothe
相关产品推荐
相关产品推荐

