URL重写多个参数

时间:2013-05-12 16:12:18

标签: regex iis-7 url-rewriting web-config

我在IIS 7中为URL Rewrite编写正则表达式模式时遇到问题。我正在我的web.config文件中直接进行工作,我需要帮助的模式如下所述:

传入的网址如下:http://www.domain.com/user/<USERNAME>/subscribers 需要重写到文件:http://www.domain.com/subscribers.php?u={R:1}

其中{R:1}与web.config文件中的含义相同,并且应该等于URL中传递的<USERNAME>值。

我今天一直在寻找几个小时,昨天又找了几个小时,但对此却一无所获。我对Regex并不是很熟悉,但是我已经学到很多东西来尝试解决这个问题,但无济于事。

提前致谢!

更新

  • <USERNAME>值可以包含任何字母数字字符(0-9,A-Z和a-z)以及下划线和句点。
  • 我使用重写模块尝试了各种不同的模式。我开始使用的是:^user/(.+)/subscribers$

用于重写的完整XML块是:

<rule name="User Subscribers">
    <match url="^user/(.+)/subscribers$" />
    <action type="Rewrite" url="subscribers.php?u={R:1}" />
</rule>

该格式适用于其余的重写,但是一旦我尝试在正则表达式模式之后粘贴静态,非正则表达式文本,我就无法使其工作。问题归结为:<USERNAME>的值被设置为我想要的值,重写的"/subscribers"部分被附加到结尾。

1 个答案:

答案 0 :(得分:0)

刚刚找到了这个问题的解决方案,这是我之前应该考虑的一个非常愚蠢的问题。

在同一个web.config文件中,在重写中,我有一个正则表达式模式(在这个问题的主题之上),它具有以下与之关联的XML行:

<match url="^user/(.*)$" />

因为IIS从上到下读取web.config,它与页面顶部的那个匹配(如上所示)而不是问题中的那个,因为它已经找到匹配。

因此,对于将来的任何人,请在web.config的重写规则部分顶部编写最具体的正则表达式模式,然后最常用以避免此问题!

感谢您的帮助!