2

我正在尝试在 IIS7 中编写 URL 重写器规则。我当前的 reg 表达式是^(policy|pricing|contact|gallery)/(.*) 我的重写规则是:/{R:1}.aspx?cat={R:2}

政策/(在这种情况下保持斜线,工作)

画廊/足球(没有提供斜线,所以这个作品)

画廊/足球/(需要删除最后一个斜线)

画廊/足球/女孩/(需要删除最后一个斜线)

任何想法都会很棒,我知道如何用 .Net 等语言处理这个问题,但我需要严格按照 IIS 中的正则表达式规则执行此操作。

4

3 回答 3

2

这可能有效

^(policy|pricing|contact|gallery)/([^/]*(?:/[^/]+)*)
于 2012-04-23T17:17:04.720 回答
1

我认为以下应该有效:

^(policy|pricing|contact|gallery)/(.*?)/?$

最后/?的意思是“匹配/一次或零次”,或者换句话说它是可选的。仅将其添加到末尾是行不通的,因为 a/仍会被 消耗.*,因此我们需要将 更改为.*.*?使其不再贪婪。

锚是必要的$,这样比赛就不会过早结束。

请注意,尾随/仍将是匹配的一部分,但不会成为第二个捕获组的一部分,因此您的重写规则应该可以正常工作。

看到它工作:http ://www.rubular.com/r/s8IqIlaqoz

于 2012-04-23T16:39:47.900 回答
0

我认为,如果您明确地将它放在最后(我没有逃脱/,因为看起来您没有这样做),您将通过不包括该组来有效地在重写时将其删除。

^(policy|pricing|contact|gallery)/(.*)/?$

通过添加$,我们确保只删除最后一个正斜杠——中间仍然可以有n 个正斜杠。

于 2012-04-23T16:40:16.453 回答