我正在尝试使用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重写。
答案 0 :(得分:0)
此规则会重定向所有使用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/