使用Slam的善意提示query-monitor plugin, 我能找出问题所在。
显然是url/search/foo/filter/bar
也符合“常规搜索”重写规则。有道理,想想看——(.+)
技术上匹配/foo/filter/bar
还有。所以我可以改进(.+)
通过排除/
s
但我找到了一个更简单的解决方案!
在希望“首场比赛获胜”中,我在一般规则之前宣布了更具体的规则——瞧,它奏效了!
add_filter("rewrite_rules_array", function($rules) {
$newRules = array();
// more specific rule first
$newRules["search/(.*)/filter/(.*)/?$"] = \'index.php?s=$matches[1]&filter=$matches[2]\';
// general rule later
$newRules["search/(.+)/?$"] = \'index.php?s=$matches[1]\';
$merged = array_merge($newRules, $rules);
return $merged;
});