我们希望我们的网络服务器(IIS 10)上的所有站点都强制实施 SSL(即将 HTTP 重定向到 HTTPS)。
我们目前在每个站点上“要求 SSL”,并设置一个处理程序来对该特定站点的 https 地址403 error
执行操作。302 redirect
效果很好。但对每个网站都这样做很麻烦,很容易出现人为错误。
理想情况下,我想在301 redirect
所有HTTP://*
HTTPS://*
在 IIS 中是否有简单的方法可以做到这一点?
答案1
适用于 IIS7+ 的 IIS URL Rewrite Module 2.1 可能是您的好帮手。该模块可从以下网址下载:IIS URL 重写。使用 URL 重写模块和URL 重写模块 2.0 配置参考解释如何使用该模块。
安装模块后,您可以使用 IIS 管理器创建主机范围的重定向。选择URL 重写,添加规则..., 和空白规则。
姓名:
重定向到 HTTPS
匹配网址
请求的 URL: Matches the Pattern
使用: Wildcards
图案: *
忽略大小写:已检查
状况
逻辑分组: Match Any
条件输入:{HTTPS}
检查输入字符串是否: Matches the Pattern
图案: OFF
忽略大小写:已检查
跨条件跟踪捕获组:未检查
服务器变量
留着空白。
行动
动作类型: Redirect
重定向 URL: https://{HTTP_HOST}{REQUEST_URI}
附加查询字符串:未检查
重定向类型: Permanent (301)
应用规则并运行 IISReset(或在 IIS 管理器中单击重新启动)
或者,安装模块后,您可以按如下方式修改 applicationHost.config 文件:
<system.webServer>
<rewrite>
<globalRules>
<rule name="Redirect to HTTPS" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" ignoreCase="true" negate="false" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTPS}" ignoreCase="true" matchType="Pattern" negate="false" pattern="OFF" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
</rule>
</globalRules>
</rewrite>
</system.webServer>
答案2
我的研究表明,这可能是重定向的更好方法:
<rewrite>
<rules>
<rule name="http to https" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>