对于单个域名的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
80>
ServerName www.mydomain.com
ServerAlias mydomain.com
RewriteEngine On
RewriteRule ^/(.*)$ https://www.mydomain.com/$1 [R=301]
这样一来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
80>
ServerName mydomain.com
RewriteEngine On
RewriteRule ^/(.*)$ www.mydomain.com/$1 [R=301]
然后www.mydomain.com.conf
中正常填写我们的配置即可:
$ vim www.mydomain.com.conf
80>
ServerName www.mydomain.com
# Your other options go here...
完成后,输入以下命令就可以了:
$ a2ensite www.mydomain.com
$ a2ensite mydomain.com
$ systemctl restart apache2