Apache 2.4 将域名指向www及默认跳转https的方法

对于单个域名的ssl证书来说,我们只能用在单一的common name上,例如www.mydomain.com,而mydomain.com或者eagle.mydomain.com是没有办法使用的。除非我们购买了wildcard的证书,否则我们需要使用Apachemod_rewrite来达到跳转到ssl证书所保护的地址上。

我们需要达到的效果:将所有对于mydomain.com/any/file/pathhttp://www.mydomain.com/any/file/path的请求跳转到对应的https://www.mydomain.com/any/file/path


要完成以上的步骤,我们需要使用apachevhosts。这里默认我们已经建立了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.comhttp://www.mydomain.com的请求都会默认跳转至https://www.mydomain.com上了。


那么如果我们仅仅是需要将mydomain.com的请求全部跳转至www.mydomain.com呢?

也很简单,我们只需要创建www.mydomain.com.confmydomain.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

你可能感兴趣的:(server,ubuntu,apache)