更新
我已经浏览了 rewrite API 上的 codex 文档,现在我的 functions.php 中有以下内容:
function my_rewrite_rules() {
add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=$matches[1]-overview&myVar=var', 'top');
}
add_action('init', 'my_rewrite_rules');
是的,我会在调整后去永久链接页面刷新规则。行为是相同的,404s 以上的规则,即使页面确实存在,我可以通过直接在地址栏中输入来访问它。但是,如果我像这样对其中一个正则表达式匹配项进行硬编码:
function my_rewrite_rules() {
add_rewrite_rule('(a|b|c|d)/?$', 'index.php?pagename=a-overview&myVar=var', 'top');
}
add_action('init', 'my_rewrite_rules');
然后一切都按预期工作,查询变量设置正确。想法?
原始问题
我一直在尝试让 Wordpress 重写规则工作很长一段时间,并且对于为什么以下代码(在 functions.php 中)不起作用感到非常困惑:
function my_rewrite_rules($rules) {
$my_rules = array('(a|b|c|d)/?$' => 'index.php?pagename=$matches[1]-overview&my_var=somevar');
return array_merge($my_rules, $rules);
}
add_filter('page_rewrite_rules', 'my_rewrite_rules');
我禁用了规范重定向,并且仅重写 404s。如果启用了重定向,它确实会转到正确的页面,但我的查询变量被剥离。如果我删除 '$matches[1]' 并将其替换为 a、b、c 或 d,则在禁用规范重定向的情况下一切正常。我意识到有一些解决方法,但我只想了解为什么以下方法不起作用?谢谢!