我试图让所有子域指向磁盘上的一个位置,并且一个特定的子域(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>
但似乎都指向主要网站。
通配符“捕捉”按照先到先得的原则在Apache中进行。 尝试交换这些虚拟主机的顺序,以便dev列表首先位于列表中。
我有点困惑。 它看起来像你以上使用的主机名(dev.cueflash.com和cueflash.com)parsing为相同的IP地址,这表明你正在尝试使用基于名字的虚拟主机…但是你的VirtualHost块都不包括一个ServerName指令(和虚拟主机块的参数可以说是不正确的基于命名的虚拟主机)。 我不确定ServerAlias的行为没有相应的ServerName。
您还需要validation您的configuration中是否有适当的NameVirtualHost指令。 如文档中所述,如果您使用的是基于名称的虚拟主机,则打开容器的参数应该与NameVirtualHost指令的参数完全匹配。 例如:
NameVirtualHost *:80 <VirtualHost *:80> ServerName cueflash.com ... </VirtualHost>
也许你想看一下关于基于名称的 Apache 虚拟主机支持的文档。
对于没有显式匹配ServerName或ServerAlias指令的主机名,您将得到“默认虚拟主机”,即“Apache首先在您的configuration中find的任何虚拟主机”。 我怀疑这个,结合你的其他问题,就是为什么一切都在击中主要的网站。
好吧,想出如何做到这一点。 基本上,你首先完成所有的非通配符主机,然后分别执行通配符,因为它遵循第一个优先顺序(第一个成功的匹配是使用的)。
<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列表中需要它们