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



我有一个使用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做同样的事情,它就会失败。为什么?

VirtualHost *:80不应该有两个条目您可以将ServerAlias用于www,并且只有一个条目:

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

ServerAlias声明可用于寻址与ServerName中相同站点的备选名称。

事实证明,问题是我的VirtualHost设置在可用的站点/00-default.conf中被覆盖。我更改了其中的,使其具有anubhava建议的配置,并且运行良好。

最新更新