在初始主机请求时重写IIS URL

在初始主机请求时重写IIS URL,iis,url-rewriting,Iis,Url Rewriting,我对IIS7集成管道URL重写有问题。 对于我的特定场景,我需要重写/重定向初始请求的一部分,如下所示 用户输入http://savecontoso.com/files/123456789/somefile.html在浏览器地址栏中 用户被重定向到http://savecontso.com/default.aspx?url=(url=“default.aspx?url={R:1}”的结果) 仅当我创建初始请求时,http://savecontoso.com/default.aspx/files/

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

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

  • 用户被重定向到
    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>
    

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

    • {R:1}
      将只匹配模式中的
      (.*)
      ,而不会匹配
      文件/123…
    • 匹配模式中的URL始终以无前导斜杠开头:应该是
      files/\d+…
      ,而不是
      /files/\d+…
    试试这个(对我来说很好):


    非常感谢您的帮助。在发布之前,我尝试过各种分组。甚至将其分解为4个部分,并尝试添加以进行测试。正斜杠是罪魁祸首。小细节。。。再次感谢,真是帮了大忙。
    <rule name="1" stopProcessing="true">
        <match url="^files/\d+/.*\.html$" />
        <action type="Redirect" url="default.aspx?url={R:0}" redirectType="Permanent" />
    </rule>