比如我的網(wǎng)站,我同時申請了兩個域名vxmat.cn和vxmat.com,我需要實現(xiàn)
1、兩個域名都訪問同一個網(wǎng)站;
2、同時支持帶www和不帶www的訪問;
3、必須部署https,當用戶以http方式訪問時,必須強制重定向到https的域名;
4、一個相同的IP和端口,在IIS中只能部署一個SSL證書,其它的Tomcat之類的沒部署過,所以不知道是否支持相同的IP和端口可以部署多個SSL證書,如果支持,可以不需要看這篇文章。所以,我只部署了一個vxmat.cn的證書。如果域名與證書不匹配時,用戶瀏覽器一般都會提示
這樣的信息。
那么,有沒有辦法可以做到不會被提示這樣的不安全呢?這也正是這篇文章的目的。如果這篇文章能幫助到您,請您點個贊!謝謝。
我最終做到了以下的訪問規(guī)則:以下都是在IIS下實現(xiàn)的。
1、當用戶以http方式訪問時,會被重定向至
https://vxmat.cn/...........
為什么要管理 http 訪問?因為大部分的用戶,應該是基本上所有的吧,在瀏覽器上輸入網(wǎng)址是,都是直接輸入 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中設(shè)置的方法。
在IIS中,有一個插件叫 IIS rewrite的功能插件,這個插件可以在IIS管理控制臺上增加一個URL重寫的功能。這個功能非常的實用,可以實現(xiàn)很多功能,比如動態(tài)功能網(wǎng)站的偽靜態(tài)也是靠它來實現(xiàn)的。至于什么叫偽靜態(tài)以及如何實現(xiàn),需要另起一篇文章才能說的清楚了。
本站要實現(xiàn)的方法,就是靠它來建立重寫或重定向規(guī)則后實現(xiàn)的。
安裝好URL重寫(IIS Rewrite)插件后,有兩種方式建立這個規(guī)則,先說說以更改web.config來建立的規(guī)則:
1、先建立一條規(guī)則:當用戶以不帶s的http進行訪問時,強制重定向到 https://vxmat.cn
這條規(guī)則基本上都是從網(wǎng)上抄的,抄的時候自己完全弄不清規(guī)則的內(nèi)容是什么意思,但它實現(xiàn)的就是:當訪問不是以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節(jié)點
<configuration>
<system.webServer>
<rewrite>
<rules>
下增加上面的代碼即可實現(xiàn)。
2、建立第二條規(guī)則:當用戶以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節(jié)點下增加上面的代碼即可實現(xiàn)。
在網(wǎng)上基本上搜不到
<match url="(.*)" /><add input="{HTTP_HOST}" pattern="(.*)vxmat.com" />
這個兩個節(jié)點的意思,給我建立第二條規(guī)則時造成了非常多的麻煩,可能很多人在建立規(guī)則時,也是被它給弄懵的吧。
<match url="(.*)" />
的意思,根據(jù)我配置完成第二條規(guī)則后,才知道它的意思,其實是 URL 中的域名之后的第一個/之后的路徑信息的匹配。
比如訪問的是
http://blog.forbs.cn/9.html ,那么它這個url匹配的只是9.html這一段字符路徑信息,而并不是完整的地址。
所以,在我建立的這兩個規(guī)則中,這里match url="(.*)",即所有的訪問都需要匹配。
那么,第1條規(guī)則就容易理解了,即所有訪問中,如果 <add input="{HTTPS}" ...中的 HTTPS這個信息匹配為off,就表示被第1條規(guī)則的條件命中,就會強制重定向到 https://vxmat.cn 上。
第2條同理,就是當匹配了第一個url的規(guī)則信息后,如果 域名部分,是 *.vxmat.com的格式或vxmat.com時,就會強制重定向到 相應的 vxmat.cn的域名格式上。
以上,就實現(xiàn)了只有一個SSL證書,也能實現(xiàn)當用戶以 https://vxmat.com 訪問時,也不會收到瀏覽器的不安全的提示。
以這種方式實現(xiàn)的域名重定向或重寫,好處是不需要在程序代碼中實現(xiàn),從而減少了很多代碼上的工作量,以及減少了很多出錯的可能。
-------------------------------------
剛剛,時間是2022.8.15,寫完文章后,再搜了一下Nginx部署多張SSL證書,發(fā)現(xiàn)各種文章里竟然都說是可以部署的,然后我又在我的服務器 windows 2012的IIS上又試了一下,發(fā)現(xiàn)還是不行。難道真的可以在nginx下部署???不太明白。有懂的,并且確認過的,希望能留言告知。
謝謝。
----------------------------------------
原來真是我弄錯了。在IIS里竟然是真的可以的,只要在部署多張證書的時候,勾選 需要服務器名稱指示 就可以了。看來是白折騰了。