最近接到一个需求,客户希望无论是http还是https请求都可以访问,并且http能转换成https。研究了一圈发现iis的重定向和重写都可以实现http强转https,记录一下。
用到的东东:
Internet信息服务(IIS)管理器7.0
URL重写模块安装包,下载地址x64(32也有):http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=1b8c7bd8-8824-4408-b8fc-49dc7f951a00
SSL证书
1、我们先来准备证书
① 打开IIS管理控制台,双击“服务器证书”。
② 在弹出的窗口中,单击右上角“导入”。
③ 导入证书文件,注意申请证书时如果填写了密码,这里也要输入相关密码。
2、然后绑定https,让站点可以接收http和https
① 右击网站站点,选择“编辑绑定”
② 在弹出的窗口中,单击“添加”按钮
③ 切换类型为https,在证书下拉框中选择刚刚导入的证书,最后单击“确认”即可
*SSL设置不要勾选
3、接下来进入正题,记录一下重定向和重写的实现方式
重定向
通过url规则匹配重定向到新的url中,使用浏览器打开链接时,视觉上会看到http变成https,就好像打开http://www.baidu.com,链接会变成https://www.baidu.com
我这边站点上挂了三个子站点,Api为接口,其他两个为后台系统、H5
如果把重定向的规则建立在Sites上的话,下面的子站点将都适用于此规则,但是
弊端:对api进行post请求,url被重定向到新的地址上,由于是重定向跳转,所以post请求会变成get请求,会出现问题。
解决办法:如果不是所有都需要http强转https,重定向规则就不要设置到总站点上,哪里需要建哪里就好
好了,我们开始创建重定向规则
① 安装好URL重写模块成功后,在WeiSites和WeixinPlat站点分别添加URL重写入站规则
单机需要建立规则的站点(以WeiSites为例),双击“URL重写”,在右边窗体中选择“添加规则”,并添加一个空白规则,如下所示:
② 添加以下规则,如图所示(名字随意):
模式:
(.*)
条件:
{HTTP} 与模式匹配 ^OFF$
{HTTP_HOST} 与模式不匹配 ^(localhost)
③ 填写结束之后点击右上角的“应用”即可。
重定向完成,在浏览器输入你要访问的链接,如果是http,就会重定向到https了。需要做其他的重定向,修改规则就可以了,还是很强大的
匹配规则取得是当前站点后面的路径,所以规则不可直接写http替换成https
重写URL
通过url规则匹配重写url,使用浏览器打开链接时,视觉上不会看到变化
举个最简单的例子,现在有一个index.html,但是我希望在浏览其中输入index.himmy就能浏览到这个页面,且地址栏不会看到请求路径的变化。像之前做.aspx重写成.html还是很常见的。
新建一个空白入站规则
我们来测试下这个模式
我们可以看到我们的请求被拆分了几块,{R:1}就是我们需要截取的那部分,我们继续
操作中设置重写的url,将{R:1}和html拼接,就可以了。访问该网站时,himmy就会被替换成html,地址栏时看不到变化的。
同理,http重写成https用重写也是可以的,看需求定了。由于http和https是请求头,所以需要和重定向一样设定,看下面。
总站点匹配规则取得是“/”后面的路径
子站点匹配的是站点后面的路径
所以在实现http重写成https时,匹配规则和条件还是得按照重定向的写(名字随便)
操作类型是重写
就我此次需求而言,选择的还是重定向,因为客户要求地址栏发生变化。
完成。