在IIS中将所有HTTP重定向到HTTPS的最佳方法


26

我们希望Web服务器(IIS 10)上的所有站点都强制执行SSL(即,将HTTP重定向到HTTPS)。

我们目前正在每个站点上“要求SSL”,并设置403 error处理程序以302 redirect对该特定站点的https地址执行。

这很好。但是,对于每个站点而言,这都是一件痛苦的事情,存在很大的人为错误余地。

理想情况下,我想建立一个永久301 redirect所有HTTP://*HTTPS://*

在IIS中有一种简单的方法吗?


您难道不能编写一个脚本来对每个站点进行此更改,这样既可以减轻管理负担,又可以防止错别字和错误?
Todd Wilcox

1
标题不正确。我认为它的目的是阅读“在IIS中将所有HTTP重定向到HTTPS的最佳方法”
Mick

@ToddWilcox您能举一个这样的脚本的例子吗?
userSteve

不要使用IIS,:D

Answers:


40

IIS7 +的IIS URL重写模块2.1可能是您的朋友。可以从IIS URL Rewrite下载该模块。使用“ URL重写模块”和“ URL重写模块2.0配置参考”介绍了如何使用该模块。

安装模块后,您可以使用IIS管理器创建主机范围的重定向。选择“ URL重写”,“ 添加规则... ”和“ 空白规则”

名称:
重定向到HTTPS

匹配URL
请求的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>

这对永久301重定向有效吗?
userSteve

按照上面的答案,@ userSteve可以选择重定向类型。
BE77Y

@userSteve糟糕,是的,您应该能够将重定向类型更改为301并获得相同的结果
sippybear

1
@sippybear还有一个问题-input =“ {HTTPS}”是什么意思?应该是{HTTP},因为它将是输入,而HTTP是输出?
userSteve

3
{HTTPS}是一个变量,您可以查询以确定连接是否安全。您可以在此处了解更多信息:docs.microsoft.com/en-us/iis/extensions/url-rewrite-module / ...在这种情况下,我们正在检查{HTTPS}是否为“ off”,然后重定向它是
sippybear

1

我的研究表明,这可能是重定向的更好方法:

<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>

1
您能解释一下为什么这样更好吗?
userSteve

对不起,我无法自我解释,只是在几个地方读到语法更好。
堕落天使

1
你有资料吗?
丹吉尔'18 -10-26

1
这与serverfault.com/a/893804/7184中的规则完全相同,但是使用正则表达式和“全部匹配”分组编写。一种可能是规则表达式使用规则默认值,并且更短。
bzlm

我在IIS 10上,选择的答案对我不起作用。由于某种原因,IIS无法将语法识别为有效规则。我将您的代码粘贴到其中,并且可以立即使用,感谢您的分享。
约旦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.