【问题标题】:URL Rewrite Multiple ParamsURL重写多个参数
【发布时间】: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>

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

【问题讨论】:

  • 你能定义&lt;USERNAME&gt;吗? (字符数,什么字符......)。你有没有尝试过重写模块?
  • @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


【解决方案1】:

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

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

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

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

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

感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多