IIS7.5 URL重写,我该如何获得正确的回调?

时间:2014-05-05 15:30:45

标签: regex iis url-rewriting

我正在尝试编写与{QUERY_STRING}条件类型匹配的正则表达式。

示例数据:

slug=something1 &slug=something2 &slug=something3 &slug=something4 &id=5645

注意:我已添加空格以便于阅读。

到目前为止

正则表达式:

^(slug=(\w+)|&slug=(\w+)|&id=(\d+))+

有了这个我能够访问5个回调:

  • {C:0} slug = something1& slug = something2& slug = something3 & slug = something4& id = 5645
  • {C:1}& id = 5645
  • {C:2}
  • {C:3}
  • {C:4} 5645

我想要实现的目标:

  • {C:0} slug = something1& slug = something2& slug = something3 & slug = something4& id = 5645
  • {C:1} something1
  • {C:2} something2
  • {C:3} something3
  • {C:4} something4
  • {C:5} 5645

另一项要求:

我总是将 id 作为最后一个变量传递,并且我希望它始终处于第5位,无论传递多少个slugs(到最多4个,最少1个。这甚至可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试

(?:slug=([a-zA-Z0-9]+)&)?(?:slug=([a-zA-Z0-9]+)&)?(?:slug=([a-zA-Z0-9]+)&)?(?:slug=([a-zA-Z0-9]+))?id=(\d+)+

重复这种模式有点难看,但我还不够聪明,无法找到另一种表达方式。

?:in

(?:slug=([a-zA-Z0-9]+)&)

告诉处理者不要捕获匹配。

这也实现了您的要求:ID总是在C:5。

我在我的IIS 7.5中尝试了这个,它可以工作,除了,如果只有一个slug - 在这种情况下,这个slug被捕获到C:3中。我不知道为什么。其他正则表达式测试人员(如http://regex101.com/#pcre)正确捕获。

我会考虑一下,但如果这需要太长时间,或者我没有提出解决方案,您可以随时添加多个重写规则(在这种情况下,为一个 slug)。

这就是它在IIS中的样子:

enter image description here