對于單個域名的
ssl
證書來說,我們隻能用在單一的
common name
上,例如
www.mydomain.com
,而
mydomain.com
或者
eagle.mydomain.com
是沒有辦法使用的。除非我們購買了
wildcard
的證書,否則我們需要使用
Apache
的
mod_rewrite
來達到跳轉到
ssl
證書所保護的位址上。
我們需要達到的效果:将所有對于
mydomain.com/any/file/path
及
http://www.mydomain.com/any/file/path
的請求跳轉到對應的
https://www.mydomain.com/any/file/path
上
要完成以上的步驟,我們需要使用
apache
的
vhosts
。這裡預設我們已經建立了
ssl
版本的
vhost
檔案,并且
https://www.mydomain.com
可以正常通路。本文使用的環境是
Ubuntu 16.04 + Apache 2.4
,如果你的
apache
版本較老,請根據官方文檔做相應調整。
基本的思路就是建立
www.mydomain.com.conf
這個
vhosts
檔案,然後添加上
Rewrite Rules
。
好了,那我們就開始。首先從預設的
vhosts
檔案複制出我們需要的配置檔案:
$ cd /etc/apache2/sites-available
$ ls -l
-default.conf default-ssl.conf
$ cp -default.conf www.mydomain.com.conf
接下來我們修改
www.mydomain.com.conf
:
$ vim www.mydomain.com.conf
<VirtualHost *:>
ServerName www.mydomain.com
ServerAlias mydomain.com
RewriteEngine On
RewriteRule ^/(.*)$ https://www.mydomain.com/$ [R=]
</VirtualHost>
這樣一來
www.mydomain.com
的跳轉就配置好了,接下來我們運作
$ a2ensite www.mydomain.com
$ systemctl restart apache2
完成後我們所有對于
mydomain.com
及
http://www.mydomain.com
的請求都會預設跳轉至
https://www.mydomain.com
上了。
那麼如果我們僅僅是需要将
mydomain.com
的請求全部跳轉至
www.mydomain.com
呢?
也很簡單,我們隻需要建立
www.mydomain.com.conf
及
mydomain.com.conf
這兩個
vhosts
檔案,然後在
mydomain.com.conf
添加我們的
Rewite Rules
:
$ vim mydomain.com.conf
<VirtualHost *:>
ServerName mydomain.com
RewriteEngine On
RewriteRule ^/(.*)$ www.mydomain.com/$ [R=]
</VirtualHost>
然後
www.mydomain.com.conf
中正常填寫我們的配置即可:
$ vim www.mydomain.com.conf
<VirtualHost *:>
ServerName www.mydomain.com
# Your other options go here...
</VirtualHost>
完成後,輸入以下指令就可以了:
$ a2ensite www.mydomain.com
$ a2ensite mydomain.com
$ systemctl restart apache2