對於單個域名的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
000-default.conf default-ssl.conf
$ cp 000-default.conf www.mydomain.com.conf
接下來我們修改www.mydomain.com.conf
:
$ vim www.mydomain.com.conf
<VirtualHost *:80>
ServerName www.mydomain.com
ServerAlias mydomain.com
RewriteEngine On
RewriteRule ^/(.*)$ https://www.mydomain.com/$1 [R=301]
</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 *:80>
ServerName mydomain.com
RewriteEngine On
RewriteRule ^/(.*)$ www.mydomain.com/$1 [R=301]
</VirtualHost>
然後www.mydomain.com.conf
中正常填寫我們的配置即可:
$ vim www.mydomain.com.conf
<VirtualHost *:80>
ServerName www.mydomain.com
# Your other options go here...
</VirtualHost>
完成後,輸入以下命令就可以了:
$ a2ensite www.mydomain.com
$ a2ensite mydomain.com
$ systemctl restart apache2