Apache2 RedirectMatch在特定情况下不起作用

时间:2016-03-27 16:15:40

标签: regex apache redirect

我有一台服务器使用apache2将所有HTTP请求重定向到HTTPS:

<VirtualHost *:80>
        ServerName www.mydomain.com.au
        RedirectMatch permanent ^/?(.*) https://www.mydomain.com.au/$1
</VirtualHost>

<VirtualHost *:80>
        ServerName mydomain.com.au
        RedirectMatch permanent ^/?(.*) https://www.mydomain.com.au/$1
</VirtualHost>

它与www域完美配合,但每当我尝试访问'裸'域时,我都会收到错误:

Not Found
The requested URL / was not found on this server.

最令人困惑的是HTTPS版本有效:

<VirtualHost *:443>
        ServerName mydomain.com.au
        RedirectMatch permanent ^/?(.*) https://www.mydomain.com.au/$1
        #...
</VirtualHost>

例如,如果我尝试获取https://mydomain.com.au/contact,则会正确地重定向到https://www.mydomain.com.au/contact。但是,如果我使用HTTP做同样的事情,它将失败。为什么呢?

2 个答案:

答案 0 :(得分:1)

VirtualHost *:80你不应该有2个条目你可以ServerAlias使用www并且只有一个条目:

<VirtualHost *:80>
        ServerName mydomain.com.au
        ServerAlias www.mydomain.com.au
        RedirectMatch permanent ^/?(.*) https://www.mydomain.com.au/$1
</VirtualHost>

ServerAlias声明可用于与ServerName中的同一网站寻址的替代名称。

答案 1 :(得分:0)

事实证明问题是我的VirtualHost设置被覆盖在sites-available / 000-default.conf中。我改变了其中有anubhava建议的配置,它工作正常。