天天看點

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