example.com
我正在尝试实现从到www.example.com
(非 www 到 www)的重定向。
我的sites-available/example.com.conf
文件看起来像这样;
<VirtualHost *:80 *:443>
ServerName www.example.com
ServerAdmin [email protected]
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/logs/error.log
CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
Redirect permanent / https://www.example.com
</VirtualHost>
我的sites-available/000-default.conf
文件看起来像这样;
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/default/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
现在..当请求时http://www.example.com
它会按请求响应。但是,当请求时,http://example.com
它将使用 中的配置来呈现请求000-default.conf
。
000-default.conf
取消链接sites-enabled/
将解决此问题,但这不是我想要做的事情(我想保留未知请求的默认行为)。
这里有什么问题呢?为什么配置会000-default.conf
覆盖重定向?
答案1
您的domain.com虚拟主机仅指定www.example.com
为名称,因此Apache只会匹配它何时www
被指定。
ServerName www.example.com
您可能想改用以下配置:
ServerName example.com
ServerAlias www.example.com
编辑:我猜测,在您的情况下,Apache 会尝试按照类似于以下的顺序匹配您的虚拟主机:
www.example.com > default > example.com (80) > example.com (443)
由于default
主机匹配端口 80 上发送的所有请求,因此永远不会测试其他两个请求。这也解释了为什么删除默认值可以使您的配置正常工作。
我对 Apache 的虚拟主机匹配不是很熟悉,但是你可以在 上找到更多相关信息这一页。