我正在尝试在IIS7中编写URL重写器规则。
我目前的注册表达是^(policy|pricing|contact|gallery)/(.*)
我的重写规则是:/{R:1}.aspx?cat={R:2}
policy /(在这种情况下保持斜线,工作)
gallery / soccer(没有提供斜杠所以这个工作)
gallery / soccer /(需要删除最后一个斜杠)
gallery / soccer / girls /(需要删除最后一个斜线)
任何想法都会很棒,我知道如何用.Net这样的语言来解决这个问题,但我需要严格按照IIS中的正则表达式规则进行操作。
答案 0 :(得分:2)
这可能有效
^(policy|pricing|contact|gallery)/([^/]*(?:/[^/]+)*)
答案 1 :(得分:1)
我认为以下内容应该有效:
^(policy|pricing|contact|gallery)/(.*?)/?$
最后的/?
表示“匹配/
一次或零次”,换句话说,它是可选的。只是将其添加到最后将无效,因为/
仍会使用.*
,因此我们需要将.*
更改为.*?
,以便它不再贪心。
$
锚是必要的,这样匹配不会太早结束。
请注意,尾随/
仍然是匹配的一部分,但它不会是第二个捕获组的一部分,因此您的重写规则应该正常工作。
答案 2 :(得分:0)
我认为如果你明确地把它放在最后(我没有转义/
,因为它看起来你没有这样做),你将在重写时有效地删除它,不包括基。
^(policy|pricing|contact|gallery)/(.*)/?$
通过添加$
,我们确保只删除最后的正斜杠 - 在它们之间仍然可以有 n 正斜杠。