【问题标题】:IIS URL Rewriting At Initial Host Request初始主机请求时的 IIS URL 重写
【发布时间】:2011-09-04 17:49:49
【问题描述】:

我遇到了 IIS7 集成管道 URL 重写的问题。 对于我的特定场景,我需要重写/重定向部分初始请求,如下所示。

  1. 用户在浏览器地址栏中输入http://savecontoso.com/files/123456789/somefile.html

  2. 用户被重定向到http://savecontso.com/default.aspx?url=url="default.aspx?url={R:1}"的结果)

目前只有在我创建初始请求 http://savecontoso.com/default.aspx/files/123456789/somefile.html 时才能按预期工作。

我必须注意,服务器上没有/files//123456789/ 的实际目录,也没有任何名为somefile.html 的文件。我只需要将整个路径和文件名附加到查询字符串。

这是我第一天使用 IIS 而不是背后的页面代码使用重定向/重写功能,我环顾了 learn.iis.net、Google 等,但无济于事。我知道重写发生在页面请求之前,但由于某种原因,我的特定代码在触发重定向之前需要页面请求。

我怀疑这是因为我没有在初始请求时触发条件?

<rewrite>
<rules>
<rule name="1" stopProcessing="true">
<match url="(.*)(/files/\d+/.*html$)" />
<action type="Redirect" redirectType="Permanent" url="default.aspx?url={R:1}" />
</rule>
</rules>
</rewrite>

【问题讨论】:

    标签: iis url-rewriting


    【解决方案1】:

    很可能由于您的匹配模式而无法正常工作:

    • {R:1} 只会匹配模式中的(.*),永远不会匹配files/123...
    • 匹配模式中的 URL 总是以没有前导斜杠开头:应该是 files/\d+... 而不是 /files/\d+...

    试试这个(对我来说很好):

    <rule name="1" stopProcessing="true">
        <match url="^files/\d+/.*\.html$" />
        <action type="Redirect" url="default.aspx?url={R:0}" redirectType="Permanent" />
    </rule>
    

    【讨论】:

    • 感谢一百万的帮助。在发布之前,我尝试过各种分组。甚至将其分解为 4 个部分并尝试附加进行测试。它是正斜线的罪魁祸首。小细节......再次感谢,真的是一个很大的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2016-08-24
    • 2014-11-30
    相关资源
    最近更新 更多