我有一个使用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建议的配置,并且运行良好。