为什么我的重写规则在没有第二个参数的情况下不起作用?

时间:2013-12-06 作者:Khan

这是我的重写规则代码:

add_rewrite_rule(\'tides/([^/]+)/([^/]*)\', \'index.php?page_id=4348&location=$matches[1]&month=$matches[2]\', \'top\');
add_rewrite_tag(\'%location%\', \'([^&]+)\');
add_rewrite_tag(\'%month%\', \'([^&]*)\');
这对于以下URL非常有用:

/tides/mylocation/mymonth/
但404在以下方面:

/tides/mylocation/
每次更改代码时,我都刷新重写规则。我试着换衣服*+ 但是没有帮助。

有什么想法吗?

Edit:

一些答案建议添加另一条重写规则,因此我添加了:

add_rewrite_rule(\'tides/([^/]+)/$\', \'index.php?page_id=4348&location=$matches[1]\', \'top\');
在我的其他规则之前,但仍然没有运气。

3 个回复
最合适的回答,由SO网友:Seamus Leahy 整理而成

正则表达式要求存在最后一个斜杠,默认情况下不会出现。所以路径tides/mylocation/ 缩写为tides/mylocation 然后进行测试。相反,使用? 并更新匹配号。

add_rewrite_rule(\'tides/([^/]+)(/([^/]+))?\', \'index.php?page_id=4348&location=$matches[1]&month=$matches[3]\', \'top\');

SO网友:Milo

第二个示例URL与您在重写规则中定义的模式不匹配。您需要添加另一个规则,以便仅使用单个路径元素匹配URL。

SO网友:ChrisLTD

你最初的潮汐重写规则是寻找两个参数。如果希望它接受不同的参数组合,则需要指定这些规则。

例如,基本Wordpress安装中有两条规则:

search/(.+)/page/?([0-9]{1,})/?$ => index.php?s=$matches[1]&paged=$matches[2] search/(.+)/?$ => index.php?s=$matches[1]

结束

相关推荐

GET_SHORTCODE_regex()只与第一个短码匹配

法典中有an example 使用get\\u shortcode\\u regex()检查是否在给定页面上调用了短代码:$pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { /