通配符 DNS 与单子域 DNS 相结合

通配符 DNS 与单子域 DNS 相结合

我尝试让所有子域指向磁盘上的一个位置,并让特定子域 (dev) 指向另一个位置。

我尝试了这个:

<VirtualHost cueflash.com>
 ServerAdmin webmaster@localhost
 ServerAlias www.cueflash.com *.cueflash.com
 DocumentRoot /home/cueflash/www/cueflash.com
 CustomLog /var/log/apache2/cueflash.com.log combined
 ErrorLog /var/log/apache2/cueflash.com.error.log
</VirtualHost>

<VirtualHost dev.cueflash.com>
 ServerAdmin webmaster@localhost
 ServerAlias dev.cueflash.com
 DocumentRoot /home/cueflash/www/dev.cueflash.com
 CustomLog /var/log/apache2/cueflash.com.dev.log combined
 ErrorLog /var/log/apache2/cueflash.com.error.dev.log
</VirtualHost>

但两者似乎都指向主站点。

答案1

在 Apache 中,通配符“捕获”是按照先到先得的原则进行的。尝试交换这些虚拟主机的顺序,以便开发站点位于列表的第一位。

答案2

我有点困惑。看起来您上面使用的两个主机名(dev.cueflash.com 和 cueflash.com)解析为同一个 IP 地址,这表明您正在尝试使用基于名称的虚拟托管...但您的两个 VirtualHost 块都不包含 ServerName 指令(并且 VirtualHost 块的参数对于基于名称的虚拟托管来说可能是不正确的)。我不确定如果没有相应的 ServerName,ServerAlias 的行为会是什么。

您还需要验证您的配置中是否有适当的 NameVirtualHost 指令。如文档中所述,如果您使用基于名称的虚拟主机,则打开容器的参数应与 NameVirtualHost 指令的参数完全匹配。例如:

  NameVirtualHost *:80

  <VirtualHost *:80>
    ServerName cueflash.com
    ...
  </VirtualHost>

也许你想看看关于基于名称的虚拟主机支持对于 Apache。

对于未明确匹配 ServerName 或 ServerAlias 指令的主机名,您将获得“默认虚拟主机”,即“Apache 在您的配置中首先找到的虚拟主机”。我怀疑,这与您的其他问题相结合,就是为什么所有内容都影响到主站点的原因。

答案3

好的,知道怎么做了。基本上,你先处理所有非通配符主机,然后单独处理通配符,因为它遵循优先顺序(第一个成功匹配的主机将被使用)。

<VirtualHost *>
 ServerName cueflash.com
 ServerAlias www.cueflash.com cueflash.com
 ServerAdmin webmaster@localhost
 DocumentRoot /home/cueflash/www/cueflash.com
</VirtualHost>

<VirtualHost *>
 ServerName dev.cueflash.com
 ServerAdmin webmaster@localhost
 DocumentRoot /home/cueflash/www/dev.cueflash.com
</VirtualHost>

<VirtualHost *>
 ServerName *.cueflash.com
 ServerAdmin webmaster@localhost
 DocumentRoot /home/cueflash/www/cueflash.com
</VirtualHost>

你可以设置

<VirtualHost *> 

<VirtualHost *:80> 

取决于您的侦听器。另外,我并没有包含错误日志等各种设置。您将需要它们在您的每个 VirtualHost 列表中

相关内容