【问题标题】:Apache2 wildcard not showing the correct DocumentRootApache2 通配符未显示正确的 DocumentRoot
【发布时间】:2026-02-20 09:55:01
【问题描述】:

由于某种原因,我的 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. 访问 api.purecore.io 时,应该从 /var/www/api.purecore.io/ 加载内容

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

【问题讨论】:

    标签: apache apache2


    【解决方案1】:

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

    ServerAlias *.purecore.io 行包含域api.purecore.io,因此它使用来自该虚拟主机的配置。

    解决方案,重命名文件以确保正确的顺序。您希望将最严格的 VirtualHost 放在最前面,通配符放在后面。

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

    然后重新启动(或优雅)。

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

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

    【讨论】:

    • 谢谢!我正试图反其道而行之! :)