【发布时间】:2013-05-12 16:12:18
【问题描述】:
我在为 IIS 7 中的 URL 重写编写正则表达式模式时遇到问题。我直接在我的 web.config 文件中完成这项工作,我需要帮助的模式如下所述:
传入的 URL 如下:http://www.domain.com/user/<USERNAME>/subscribers
需要重写到文件:http://www.domain.com/subscribers.php?u={R:1}
{R:1} 与 web.config 文件中的含义相同,应等于 URL 中传递的 <USERNAME> 值。
我今天已经搜索了几个小时,昨天又搜索了几个小时,但对此几乎没有任何建议。我对正则表达式不是很熟悉,但是学到了很多东西来尝试解决这个问题,但是无济于事。
提前致谢!
更新
-
<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" 部分附加到末尾。
【问题讨论】:
-
你能定义
<USERNAME>吗? (字符数,什么字符......)。你有没有尝试过重写模块? -
@cheesemacfly 我会用更多信息更新我的问题。感谢您的建议!
-
阅读您的最后一次编辑,我认为您应该使用类似
^user/(.+)(/subscribers)$的东西,这样/subscribers将成为R:2反向引用的一部分,而不是在R:1的末尾(我现在没有 IIS 访问权限,无法测试...) -
有趣的想法@cheesemacfly。刚刚尝试了一下,但没有成功,但我确实认为你是在正确的范围内。我还尝试了
^user/(.+)/(\Qsubscribers\E)$(转义整个“订阅者”字符串),但它似乎也不起作用。 -
我试过这个:regex101.com/r/xB4rS5(注意
/被转义了\/)。如果还是不行,我明天可以用运行 IIS 的电脑试试。
标签: regex iis-7 url-rewriting web-config