Apache 的 000-default.conf - 奇怪的行为

Apache 的 000-default.conf - 奇怪的行为

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 的虚拟主机匹配不是很熟悉,但是你可以在 上找到更多相关信息这一页

相关内容