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



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

它主要起作用。然而,我注意到,如果请求使用默认文档,则会出现奇怪的不一致。

例如。。。

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

正确重定向到…

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

但是,此URL。。。

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重写。

此规则将重定向以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.aspxhttp://[mydomain]/admin/default.aspxhttps://[mydomain]/admin/default.aspxhttp://[mydomain]/test_folder/https://[mydomain]/test_folder/

最新更新