http自动跳转https小记
因近期跌代更新ios/android后,由于担心ios https从17年起限制的问题,故目前我们将http更改为https,但既然支持https,故想将服务器直接更新为https,将原http请求自动转发至对应的https路径url
理论上应该很可行的,这种东西无非就是路由转发,经上网搜索后,查到一篇前辈的文章
http://blog.csdn.net/bona020/article/details/50807999,故引用这篇文章。后述核心内容均非原创,从该篇文章摘取
修改以下文件:IIS6.0 路径:C:\WINDOWS\Help\iisHelp\common\403-4.htm
IIS7.0以上 路径:C:\inetpub\custerr\zh-CN\403.htm
为以下内容
<HTML><HEAD><TITLE>该页必须通过安全通道查看</TITLE>
<META HTTP-EQUIV=”Content-Type” Content=”text/html; charset=GB2312″>
</HEAD><BODY>
<script type="text/javascript">
var url = window.location.href;
if (url.indexOf("https") < 0) {
url = url.replace("http:", "https:");
window.location.replace(url);
}
</script>
</BODY></HTML>
注释:IIS6中,站点属性-》目录安全性-》编辑中把“要求安全通道(SSL)”勾选上即可。
IIS7、8中,SSL设置-》把“要求SSL”勾选即可。
URL重写方式:
下载安装URL重写模块:Microsoft URL Rewrite Module
ASP.NET站可直接修改web.config(与“6、IIS配置图示”效果相同),例如:见<rewrite>...</rewrite>节点
<?xml version="1.0" encoding="utf-8"?> <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" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口
要实现多个站点对应HTTPS只能更改IIS配置
地址:C:\Windows\system32\inetsrv\config\applicationHost.config、
默认一个站点带一个这样的配置
<binding protocol="https" bindingInformation="*:443" />
修改成:
<binding protocol="https" bindingInformation="*:443:www.baidu.om" />
切记需要对应的每个站点都修改。
最后,如果服务器本地可以访问HTTPS外网不行则要考虑是网防火墙没开放443及是否用了反向代理这些。
IIS原配置为配置站点A:http协议+80端口,后购买了免费的阿里云SSL证书一年,按相关要求安装完证书后,同时在该A站点加入配置:https+443端口
我们服务器是64位,下载完安装后将webconfig中加入对应的rewrite节点重启后。
在浏览器中输入对应的http地址,看到自动跳转至https对应的地址
验证了多次均成功,很实用,故略作分享!