0

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

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

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

我今天已经搜索了几个小时,昨天又搜索了几个小时,但对此几乎没有任何建议。我对正则表达式不是很熟悉,但是学到了很多东西来尝试解决这个问题,但无济于事。

提前致谢!

更新

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

该重写的完整 XML 块是这样的:

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

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

4

1 回答 1

0

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

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

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

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

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

谢谢您的帮助!

于 2013-05-12T17:00:53.360 回答