簡體   English   中英

Apache重寫規則中的復雜正則表達式

[英]Complex regex in Apache rewrite rule

我正在嘗試使用重寫規則創建以下行為。

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)之后的斜杠后面可以有更多分配給變量的變量

我很好,直到動作詞(add | edit)之后的可選斜杠為止。 那就是我不太了解正則表達式以實現我的目標的地方。

類似於以下作品:

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

但是,URL最終在GET變量中包含斜杠。 我想我可以引用(/(.*)/?)?中間的(.*) (/(.*)/?)? $4 ,但我不是。

然后,我閱讀了有關非捕獲組的信息 ,因此添加了一個?:像這樣:

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

這可能是我忽略的相對簡單的事情。

您快到了,只需要進行一些小的修改:

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

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

要替換的/addedit.php?$3=$5表達式: /addedit.php?$3=$5

http://regexr.com?36gp3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM