IIS重写模块不适用于默认文档请求

时间:2016-05-03 01:36:55

标签: asp.net iis url-rewriting web-config

我正在尝试使用IIS重写模块将HTTP重定向到我网站某些区域的HTTPS。

它主要起作用。但是,如果请求使用默认文档,我注意到一个奇怪的不一致。

例如......

http://[mydomain]/test_folder/default.aspx

正确地重定向到...

https://[mydomain]/test_folder/default.aspx

但是,这个网址......

http://[mydomain]/test_folder/

不会重定向。

我的重写规则定义如下......

<rewrite>
  <rules>
    <rule name="Redirect to HTTPS" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
        <add input="{HTTP_HOST}" pattern="^mydomain.com$" ignoreCase="true" />
        <add input="{SCRIPT_NAME}" pattern="^/(?:admin|test_).*" ignoreCase="true" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
    </rule>
  </rules>
</rewrite>

我的默认文件定义如下......

<defaultDocument enabled="true">
  <files>
    <clear />
    <add value="default.asp" />
    <add value="default.aspx" />
  </files>
</defaultDocument>

就像处理了默认文档的请求一样,它也不会处理我的重写规则。

任何人都可以建议我可能做错了什么,以及如何解决它?

更新:我已经能够通过删除重写规则解决问题,而是在global.asax中进行重定向。虽然这看起来像是一种稍微晦涩的方式,所以如果有合适的解决方案,我宁愿使用IIS重写。

1 个答案:

答案 0 :(得分:0)

此规则会重定向所有使用admintest_

加注星标的请求
<rule name="redirect to HTTPS" stopProcessing="true">
    <match url="^(admin|test_)" />
    <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
        <add input="{HTTP_HOST}" pattern="^mydomain.com$" ignoreCase="true" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}"/>
</rule>

示例:

http://[mydomain]/test_folder/default.aspxhttps://[mydomain]/test_folder/default.aspx http://[mydomain]/admin/default.aspxhttps://[mydomain]/admin/default.aspx http://[mydomain]/test_folder/https://[mydomain]/test_folder/