我在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"
部分被附加到结尾。
答案 0 :(得分:0)
刚刚找到了这个问题的解决方案,这是我之前应该考虑的一个非常愚蠢的问题。
在同一个web.config
文件中,在重写中,我有一个正则表达式模式(在这个问题的主题之上),它具有以下与之关联的XML行:
<match url="^user/(.*)$" />
因为IIS从上到下读取web.config,它与页面顶部的那个匹配(如上所示)而不是问题中的那个,因为它已经找到匹配。
因此,对于将来的任何人,请在web.config的重写规则部分顶部编写最具体的正则表达式模式,然后最常用以避免此问题!
感谢您的帮助!