2013-05-12 78 views
0

我在为IIS 7中的URL重写正则表达式模式时遇到问题。我直接在我的web.config文件中完成这项工作,我需要帮助的模式描述如下:URL重写多个参数

传入的URL,如以下几点:http://www.domain.com/user/<USERNAME>/subscribers 需要重写的文件:http://www.domain.com/subscribers.php?u={R:1}

{R:1}的含义,因为它会在web.config文件相同,并应等于通过了<USERNAME>值在URL中。

我一直在寻找几个小时今天,还有几个昨天,但没有发现什么建议。我对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>的值被设置为我想要的值,重写的部分被追加到最后。

+0

你能定义''吗? (字符数,什么字符...)。你有没有尝试过任何与重写模块呢? – cheesemacfly 2013-05-12 16:19:23

+0

@cheesemacfly我会用更多的信息更新我的问题。感谢您的建议! – 2013-05-12 16:21:06

+0

读你最后一次编辑,我认为你应该使用'^ user /(.+)(/ subscribers)$'这样的方式,'/ subscribers'将成为'R:2'后面引用的一部分,而不是在'R:1'结尾(我现在没有IIS访问权限,无法测试...) – cheesemacfly 2013-05-12 16:45:54

回答

0

刚刚发现了这个问题的解决方案,这是一个相当愚蠢的问题,我应该早些考虑。

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

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

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

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

感谢您的帮助!