Apache2 通配符未显示正确的 DocumentRoot

Apache2 wildcard not showing the correct DocumentRoot

出于某种原因,我的 apache2 服务器向我显示了另一个虚拟主机的内容,而不是通配符虚拟主机。

当我输入 hello.purecore.io 时,apache2 服务器显示 api.purecore.io 中的内容,而它应该显示另一个文件夹。

我的通配符域的虚拟主机配置是

<VirtualHost *:80>
  DocumentRoot /var/www/wildcard.purecore.io
  ServerName wildcard.purecore.io
  ServerAlias *.purecore.io
</VirtualHost>

并保存为“00_wildcard.purecore.io.conf”, api.purecore.io 的虚拟主机是

<VirtualHost api.purecore.io:80>
        DocumentRoot /var/www/api.purecore.io/
        ServerName api.purecore.io
        ServerAdmin quiquelhappy@purecore.io
</VirtualHost>

保存为api.purecore.io.conf。所以,

  1. 当输入除 api.purecore.io 以外的任何随机子域时,它应该从 /var/www/wildcard.purecore.io,
  2. 加载内容
  3. 访问api.purecore.io时,应该加载/var/www/api的内容。purecore.io/

但由于某些原因,访问随机域时,它也显示 /var/www/api.purecore.io/ 的内容。

Apache 按读取顺序处理 <VirtualHost> 部分。所以这里读到的第一个是00_wildcard.purecore.io.conf,然后是api.purecore.io.conf.

但是 ServerAlias *.purecore.io 行包含域 api.purecore.io,因此它使用来自该 VirtualHost 的配置。

解决方案,重命名文件以确保顺序正确。你想把最严格的 VirtualHost 放在第一位,然后是通配符。

mv 00_wildcard.purecore.io.conf 01_wildcard.purecore.io.conf
mv api.purecore.io.conf 00_api.purecore.io.conf

并重新启动(或优雅)。

仅供参考 1:如果 Apache 找不到与请求匹配的另一个 VirtualHost 定义,则第一个 VirtualHost 始终是默认值。

仅供参考 2:不需要 <VirtualHost api.purecore.io:80>,输入 <VirtualHost *:80>,顺序就是这里的解决方案。