我正在尝试使用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重写。
此规则将重定向以admin
或test_
:开头的所有请求
<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.aspx
至https://[mydomain]/test_folder/default.aspx
http://[mydomain]/admin/default.aspx
至https://[mydomain]/admin/default.aspx
http://[mydomain]/test_folder/
到https://[mydomain]/test_folder/