经常遇到这样一个需求,IIS网站绑定了SSL证书后,需要使用https方式访问。但是很多客户习惯性的只会输入域名。这个时候就会遇到2个问题:

1、http站点关闭的情况下,用户的浏览器显示无法访问

2、http可以访问的话,用户直接访问了http站点。而现在主流的chrome浏览器直接提示为网站高危。

 

为了解决这个问题,找了些资料,发现用IIS的URL重新功能是最好的。当用户直接域名访问站点时,直接自动跳转到https://xxx.xxx.xxx

 

具体实现方式如下:

1、windows2008R2开始IIS就不自带此功能了,需要去微软站点下载此功能扩展程序。

rewrite_amd64_en-US.msi

下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=47337

windows 2008 r2版本

http://download.microsoft.com/download/4/9/C/49CD28DB-4AA6-4A51-9437-AA001221F606/rewrite_x86_zh-CN.msi

http://download.microsoft.com/download/4/E/7/4E7ECE9A-DF55-4F90-A354-B497072BDE0A/rewrite_x64_zh-CN.msi

 

2、安装后,在IIS管理中,找到对应站点,在右侧功能配置栏中找到“URL Rewrite”配置项

9.png

 

3、新增规则,主要配置信息为

  • RequestURL选择“Matchs the Pattern”,pattern填入“(.*)”

  • action type选择redirect方式,RedirectURL填入“https://{HTTP_HOST}/{R:1}”

  • 其他的配置点看下图

image.png

image.png

image.png

补充,另外最直接的方法就是安装好URL rewrite后,在站点的web.config中加入如下代码。同时也让IIS启用HTTP严格传输安全性(HSTS)

<configuration>
   <system.webServer>
       <rewrite>
           <rules>
               <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                   <match url="(.*)" />
                   <conditions>
                       <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                   </conditions>
                   <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                       redirectType="Permanent" />
               </rule>
           </rules>
           <outboundRules>
               <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
                   <match serverVariable="RESPONSE_Strict_Transport_Security"
                       pattern=".*" />
                   <conditions>
                       <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                   </conditions>
                   <action type="Rewrite" value="max-age=31536000" />
               </rule>
           </outboundRules>
       </rewrite>
   </system.webServer>
</configuration>