多域名的同一个网站,需要部署https,教你如何只用一个SSL证书即可完成部署,且不提示不安全的连接信息。URL重写(重定向插件IIS Write)的使用与规则设置方法
比如我的网站,我同时申请了两个域名vxmat.cn和vxmat.com,我需要实现
1、两个域名都访问同一个网站;
2、同时支持带www和不带www的访问;
3、必须部署https,当用户以http方式访问时,必须强制重定向到https的域名;
4、一个相同的IP和端口,在IIS中只能部署一个SSL证书,其它的tomcat之类的没部署过,所以不知道是否支持相同的IP和端口可以部署多个SSL证书,如果支持,可以不需要看这篇文章。所以,我只部署了一个vxmat.cn的证书。如果域名与证书不匹配时,用户浏览器一般都会提示
这样的信息。
那么,有没有办法可以做到不会被提示这样的不安全呢?这也正是这篇文章的目的。如果这篇文章能帮助到您,请您点个赞!谢谢。
我最终做到了以下的访问规则:以下都是在IIS下实现的。
1、当用户以http方式访问时,会被重定向至 https://vxmat.cn/...........
为什么要管理 http 访问?因为大部分的用户,应该是基本上所有的吧,在浏览器上输入网址是,都是直接输入 www...或者是 toutiao.com,一般不会输入http或者是https的,而浏览器默认都会先以 http:// 方式进行访问(可能以后的浏览器会改成默认为https吧),此时,咱们就需要把http的访问强制重向到https上。
2、当用户以https://方式访问 https://vxmat.com 和 https://www.vxmat.com 时,会被分别重定向到 https://vxmat.cn 和 https://www.vxmat.com 。
下面就是在IIS中设置的方法。
在IIS中,有一个插件叫 IIS rewrite的功能插件,这个插件可以在IIS管理控制台上增加一个URL重写的功能。这个功能非常的实用,可以实现很多功能,比如动态功能网站的伪静态也是靠它来实现的。至于什么叫伪静态以及如何实现,需要另起一篇文章才能说的清楚了。
本站要实现的方法,就是靠它来建立重写或重定向规则后实现的。
安装好URL重写(IIS Rewrite)插件后,有两种方式建立这个规则,先说说以更改web.config来建立的规则:
1、先建立一条规则:当用户以不带s的http进行访问时,强制重定向到 https://vxmat.cn
这条规则基本上都是从网上抄的,抄的时候自己完全弄不清规则的内容是什么意思,但它实现的就是:当访问不是以https开头的时候,就会重定向到 https://vxmat.cn
<rule name="HTTP to HTTPS" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAny" trackAllCaptures="false"> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://vxmat.cn/{R:1}" redirectType="Found" /> </rule>
在web.config节点
<configuration>
<system.webServer>
<rewrite>
<rules>
下增加上面的代码即可实现。
2、建立第二条规则:当用户以https://方式访问 https://vxmat.com 和 https://www.vxmat.com 时,会被分别重定向到 https://vxmat.cn 和 https://www.vxmat.com :
<rule name="vxmat.com->vxmat.cn" enabled="true" patternSyntax="ECMAScript" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTP_HOST}" pattern="(.*)vxmat.com" /> </conditions> <action type="Redirect" url="https://{C:1}vxmat.cn/{R:1}" /> </rule>
同样的,也是在rules节点下增加上面的代码即可实现。
在网上基本上搜不到
<match url="(.*)" /> <add input="{HTTP_HOST}" pattern="(.*)vxmat.com" />
这个两个节点的意思,给我建立第二条规则时造成了非常多的麻烦,可能很多人在建立规则时,也是被它给弄懵的吧。
<match url="(.*)" />
的意思,根据我配置完成第二条规则后,才知道它的意思,其实是 URL 中的域名之后的第一个/之后的路径信息的匹配。
比如访问的是 http://blog.forbs.cn/9.html ,那么它这个url匹配的只是9.html这一段字符路径信息,而并不是完整的地址。
所以,在我建立的这两个规则中,这里match url="(.*)",即所有的访问都需要匹配。
那么,第1条规则就容易理解了,即所有访问中,如果 <add input="{HTTPS}" ...中的 HTTPS这个信息匹配为off,就表示被第1条规则的条件命中,就会强制重定向到 https://vxmat.cn 上。
第2条同理,就是当匹配了第一个url的规则信息后,如果 域名部分,是 *.vxmat.com的格式或vxmat.com时,就会强制重定向到 相应的 vxmat.cn的域名格式上。
以上,就实现了只有一个SSL证书,也能实现当用户以 https://vxmat.com 访问时,也不会收到浏览器的不安全的提示。
以这种方式实现的域名重定向或重写,好处是不需要在程序代码中实现,从而减少了很多代码上的工作量,以及减少了很多出错的可能。
文章写成后,觉得不太甘心,然后又各种搜了一下,结果发现我确实是弄错了。原来IIS上也是可以支持多域名同一个端口绑定不同的SSL证书的,只是勾选上“需要服务器名称指示”的选项即可。
转载请注明 : 文章转载自不了阁-飞哥 blog.forbs.cn
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载请务必注明出处,尊重他人劳动成果共创和谐网络环境。