天天看点

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

对于单个域名的

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