带有规范主机的 http 到 https 的 IIS 重写规则

Posted

技术标签:

【中文标题】带有规范主机的 http 到 https 的 IIS 重写规则【英文标题】:IIS rewrite rule for http to https with canonical host 【发布时间】:2017-08-09 15:21:51 【问题描述】:

环境:

Windows Server 2012 R2 IIS 8.5

挑战

重写规则是全新的,我需要实现一个规则来做两件事:

    将协议从 http 更改为 https 将主机名更改为 www.example.com

问题是我不能真正测试这个本身,因为我们的 SSL 证书只存在于我们的生产站点上,所以我需要确保我做对了。

在进行研究时,我发现有关重写规则的文档有些稀疏,但从各种示例等中拼凑出以下内容:

    <rule name=”http_to_https_redirect">
     <match url="(.*)" />
<conditions><add input="HTTPS" pattern="^OFF$" ignoreCase="true" />
</conditions>
     <action type="Redirect" url="https://www.example.com/R:1" redirectType="Permanent" />
    </rule>

我仍然不知道 R:1 的含义或它的行为方式,因为我发现只有一个简短的说明,它是“对规则模式的反向引用由 R:N 标识,其中 N 是从 0 到 9。请注意,对于这两种类型的反向引用,R:0 和 C:0 将包含匹配的字符串。” (来自:https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference)

问题:

根据上面的第 1 点和第 2 点,上述规则是否正确?

希望有更多经验的人可以确认 - 是/否?

还发现了这个帖子: IIS Url Rewrite rule HTTP to HTTPS AND add WWW ...但实际的重写规则从未在答案中发布!

【问题讨论】:

【参考方案1】:

使用https和规范主机完成重定向的重写url如下:

  <rewrite>
   <rules>
    <rule name="redirect_http_to_https_with_canonical_host" stopProcessing="true">
     <match url="(.*)" />
     <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
       <add input="HTTPS" pattern="off" />
       <add input="HTTP_HOST" pattern="www\.example\.com" negate="true" /> 
     </conditions>
     <action type="Redirect" url="https://www.example.comURL" appendQueryString="true" redirectType="Permanent" />
    </rule>
   </rules>
  </rewrite>

以上适用于以下情况:

Input:  http://example.com
Result: https://www.example.com

Input:  http://www.example.com
Result: https://www.example.com

Input:  http://example.com/somepage.aspx   
Result: https://www.example.com/somepage.aspx

Input:  http://example.com/somepage.aspx?q=test
Result: https://www.example.com/somepage.aspx?q=test

Input:  https://example.com
Result: https://www.example.com

Input:  https://www.example.com
Result: https://www.example.com

Input:  https://example.com/somepage.aspx   
Result: https://www.example.com/somepage.aspx

Input:  https://example.com/somepage.aspx?q=test
Result: https://www.example.com/somepage.aspx?q=test

【讨论】:

如何将其导入到我的 IIS url 重写中?

以上是关于带有规范主机的 http 到 https 的 IIS 重写规则的主要内容,如果未能解决你的问题,请参考以下文章

RewriteCond 适用于 HTTP,但不适用于 HTTPS 虚拟主机

在没有 ServerName 的默认虚拟主机上将 HTTP 重定向到 HTTPS

Apache 2.4 将本地虚拟主机重定向到 https 而不是 http

如何使用带有(免费和终身有效)证书的 https 访问本地主机? - 课程

Ngrok - 带有虚拟主机的 HTTP 400

在带有自定义域的 OpenShift 中从 HTTPS 重定向到 HTTP