我正在使用正则表达式,所以我想我会在这里问。基本上,我需要它来匹配集合的URI,除了某个集合(/new
)。
即:
/properties # match
/properties/25 # match
/properties/new # rejected
我尝试过以下各种变体,但无济于事:
/properties(^(/new)).*
我认为我的麻烦在于否定,但我不能完全理解我的意图。对解决方案的解释将非常感激!
答案 0 :(得分:1)
^
否定字符类(由[ ]
包围的任意顺序的一组字符。您需要使用?!
。您也不应使用.*
它没有添加任何东西。如果你想匹配任何你只是不要放任何东西:)。你也不需要捕捉比赛。根据您的设置方式,您可能还需要转义斜杠(/
)
试试这个:
\/properties(?!\/new)
答案 1 :(得分:0)
您只需使用其他RewriteCond
:
RewriteCond $2 !=new
RewriteRule ^/properties(/(.*))?$ …
这将匹配/properties
,/properties/
和/properties/…
,后跟其他任何内容,但不是/properties/new
。
答案 2 :(得分:0)
这个怎么样:
/properties(?!/new)(?:/.*){0,1}
:`(?!/ new)是否定正向查找,基本上是说:确保无法匹配
以下内容:(?:/。+){0,1}允许匹配其他路径(即。/ 25),并且是一个非捕获组,表示匹配/后跟零个或多个字符,并且将它作为一组匹配为零到一次。即使没有/ 25,{0,1}也允许它匹配。