目录的动态路由
Dynamic route for catalog
我有这条路线
routes.catalog.type = "Zend_Controller_Router_Route_Regex"
routes.catalog.route = "(a|a-b|b|c|d|d-a|d-b)(.*)"
routes.catalog.defaults.controller = "category"
routes.catalog.defaults.action = "index"
正确匹配:
http://www.example.com/a
http://www.example.com/a/some-param/2
但很糟糕:
http://www.example.com/ab
哪个正则表达式路由排除这种情况?
在任何 (.*) 之前带有斜杠的内容,例如
"(a|a-b|b|c|d|d-a|d-b)(/)(.*)"
无效。
您可以使用
routes.catalog.route = "^(a|a-b|b|c|d|d-a|d-b)(/.*)?$"
(/.*)?
部分匹配 1 次或 0 次出现(即它是可选的)的 /
字符,后跟除换行字符以外的任何 0+ 个字符。这意味着,在您的交替(a
、a-b
等)之后,必须有 /
(后跟任何内容)或字符串结尾 ($
).
为了更简洁高效,你可以"shrink"有点像
"^(d(?:-[ab])?|a(?:-b)?|[bc])(/.*)?$"
参见 this regex demo。但是,如果您认为可读性大打折扣,您仍然可以使用上面的表达式。
详情
^
- 字符串开头
(d(?:-[ab])?|
- d
后跟 -a
或 -b
或
a(?:-b)?|
- a
后跟 -b
[bc])
- b
或 c
(/.*)?
- 一个可选的组 2 匹配 /
和任何 0+ 个字符直到
$
- 字符串结尾。
我有这条路线
routes.catalog.type = "Zend_Controller_Router_Route_Regex"
routes.catalog.route = "(a|a-b|b|c|d|d-a|d-b)(.*)"
routes.catalog.defaults.controller = "category"
routes.catalog.defaults.action = "index"
正确匹配:
http://www.example.com/a
http://www.example.com/a/some-param/2
但很糟糕:
http://www.example.com/ab
哪个正则表达式路由排除这种情况?
在任何 (.*) 之前带有斜杠的内容,例如
"(a|a-b|b|c|d|d-a|d-b)(/)(.*)"
无效。
您可以使用
routes.catalog.route = "^(a|a-b|b|c|d|d-a|d-b)(/.*)?$"
(/.*)?
部分匹配 1 次或 0 次出现(即它是可选的)的 /
字符,后跟除换行字符以外的任何 0+ 个字符。这意味着,在您的交替(a
、a-b
等)之后,必须有 /
(后跟任何内容)或字符串结尾 ($
).
为了更简洁高效,你可以"shrink"有点像
"^(d(?:-[ab])?|a(?:-b)?|[bc])(/.*)?$"
参见 this regex demo。但是,如果您认为可读性大打折扣,您仍然可以使用上面的表达式。
详情
^
- 字符串开头(d(?:-[ab])?|
-d
后跟-a
或-b
或a(?:-b)?|
-a
后跟-b
[bc])
-b
或c
(/.*)?
- 一个可选的组 2 匹配/
和任何 0+ 个字符直到$
- 字符串结尾。