![通配符 DNS 与单子域 DNS 相结合](https://linux22.com/image/499698/%E9%80%9A%E9%85%8D%E7%AC%A6%20DNS%20%E4%B8%8E%E5%8D%95%E5%AD%90%E5%9F%9F%20DNS%20%E7%9B%B8%E7%BB%93%E5%90%88.png)
我尝试让所有子域指向磁盘上的一个位置,并让特定子域 (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 列表中