IIS URL重写初始主机请求

时间:2011-09-04 17:49:50

标签: iis url-rewriting

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

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

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

  3. 仅当我创建初始请求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>
    

1 个答案:

答案 0 :(得分:2)

由于你的匹配模式,很可能它不起作用:

  • {R:1}只会与您的模式中的(.*)匹配,永远不会匹配files/123...
  • 匹配模式中的网址始终以没有前导斜杠开头:应为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>