对于单个域名的
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