我正在尝试使用重写规则创建以下行为。
https://domain.com/admin/user/add => /addedit.php?add=
https://domain.com/admin/user/add/ => /addedit.php?add=
https://domain.com/admin/user/add/123 => /addedit.php?add=123
https://domain.com/admin/user/add/123/ => /addedit.php?add=123
user
是变量add
可以是"添加"或"编辑" 我在行动词(添加|编辑)之后直到可选斜杠为止。这就是我不能很好地了解正则表达式以实现我的目标。
以下作品:
RewriteRule ^admin/(.*)/(add|edit)(/(.*)/?)?$ /admin/$1/addedit.php?$2=$3
但是,URL最终包含GET
变量中的斜杠。我想我可以在(.*)
中间引用(/(.*)/?)?
作为$4
,但我不是。
然后我阅读了non capturing groups,因此添加了?:
,如此:
RewriteRule ^admin/(.*)/(add|edit)(?:/(.*)/?)?$ /admin/$1/addedit.php?$2=$3
这可能是我忽视的一件相对简单的事情。
答案 0 :(得分:1)
你几乎就在那里,只需要做一些小修改:
RewriteRule ^admin/([^/]+)/(add|edit)(?:/([^/]*))?/?$ /admin/$1/addedit.php?$2=$3 [L,NC]
答案 1 :(得分:0)
要匹配的正则表达式:^(.*\/admin)(\/user)\/((?:add)|(?:edit))\/?(([^/]*)?\/?)$
要替换的正则表达式:/addedit.php?$3=$5