1

我正在尝试使用重写规则创建以下行为。

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可以是“添加”或“编辑”
  • 始终允许使用尾随斜杠
  • 在分配给变量的 (add|edit) 之后的斜杠之后可以有更多

我很好,直到动作词(添加|编辑)之后的可选斜杠。这就是我不太了解正则表达式以实现我的目标的地方。

类似以下的工作:

RewriteRule ^admin/(.*)/(add|edit)(/(.*)/?)?$ /admin/$1/addedit.php?$2=$3

但是,URL 最终会在GET变量中包含斜杠。我想我可以引用as(.*)的中间,但我不是。(/(.*)/?)?$4

然后,我阅读了有关非捕获组的信息,因此添加了?:如下内容:

RewriteRule ^admin/(.*)/(add|edit)(?:/(.*)/?)?$ /admin/$1/addedit.php?$2=$3

这可能是我忽略的一个相对简单的事情。

4

2 回答 2

1

你快到了,只需要稍作修改:

RewriteRule ^admin/([^/]+)/(add|edit)(?:/([^/]*))?/?$ /admin/$1/addedit.php?$2=$3 [L,NC]
于 2013-09-27T14:33:41.170 回答
0

正则表达式匹配:^(.*\/admin)(\/user)\/((?:add)|(?:edit))\/?(([^/]*)?\/?)$

正则表达式替换:/addedit.php?$3=$5

http://regexr.com?36gp3

于 2013-09-27T14:41:23.817 回答