Apache重写规则中的复杂正则表达式

时间:2013-09-27 14:26:00

标签: regex .htaccess mod-rewrite

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

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

这可能是我忽视的一件相对简单的事情。

2 个答案:

答案 0 :(得分:1)

你几乎就在那里,只需要做一些小修改:

RewriteRule ^admin/([^/]+)/(add|edit)(?:/([^/]*))?/?$ /admin/$1/addedit.php?$2=$3 [L,NC]

答案 1 :(得分:0)

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

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

http://regexr.com?36gp3

相关问题