对于单个域名的ssl证书来说,我们只能用在单一的common name上,例如www.baidu.com,而baidu.com或者eagle.baidu.com是没有办法使用的。除非我们购买了wildcard的证书,否则我们需要使用Apache的mod_rewrite来达到跳转到ssl证书所保护的地址上。
我们需要达到的效果:将所有对于baidu.com/any/file/path及http://www.baidu.com/any/file/path的请求跳转到对应的https://www.baidu.com/any/file/path上
要完成以上的步骤,我们需要使用apache的vhosts。这里默认我们已经建立了ssl版本的vhost文件,并且https://www.baidu.com可以正常访问。本文使用的环境是Ubuntu 16.04 + Apache 2.4,如果你的apache版本较老,请根据官方文档做相应调整。
基本的思路就是新建www.baidu.com.conf这个vhosts文件,然后添加上Rewrite Rules。
好了,那我们就开始。首先从默认的vhosts文件复制出我们需要的配置文件:
$ cd /etc/apache2/sites-available
$ ls -l
000-default.conf default-ssl.conf
$ cp 000-default.conf www.baidu.com.conf
接下来我们修改www.baidu.com.conf:
$ vim www.baidu.com.conf
<VirtualHost *:80>
ServerName www.baidu.com
ServerAlias baidu.com
RewriteEngine On
RewriteRule ^/(.*)$ https://www.baidu.com/$1 [R=301]
</VirtualHost>
这样一来www.baidu.com的跳转就配置好了,接下来我们运行
$ a2ensite www.baidu.com
$ systemctl restart apache2
完成后我们所有对于baidu.com及http://www.baidu.com的请求都会默认跳转至https://www.baidu.com上了。
那么如果我们仅仅是需要将baidu.com的请求全部跳转至www.baidu.com呢?
也很简单,我们只需要创建www.baidu.com.conf及baidu.com.conf这两个vhosts文件,然后在baidu.com.conf添加我们的Rewite Rules:
$ vim baidu.com.conf
<VirtualHost *:80>
ServerName baidu.com
RewriteEngine On
RewriteRule ^/(.*)$ www.baidu.com/$1 [R=301]
</VirtualHost>
然后www.baidu.com.conf中正常填写我们的配置即可:
$ vim www.baidu.com.conf
<VirtualHost *:80>
ServerName www.baidu.com
# Your other options go here...
</VirtualHost>
完成后,输入以下命令就可以了:
$ a2ensite www.baidu.com
$ a2ensite baidu.com
$ systemctl restart apache2