在Linux系统上使用Apache2有一种方法可以使用mod_vhost_alias来拥有多个VirtualDocumentRoot 吗?
这是我目前正在使用的命名约定,并希望继续使用:
host directory 127.0.0.1 domain domain.com 127.0.0.1 sub.domain domain.com_sub
然后在我的httpd.conf的vhosts部分中:
NameVirtualHost 127.0.0.1VirtualDocumentRoot /var/www/%0.0.com VirtualDocumentRoot /var/www/%2.0.com_%1
这个问题是当我访问sub.domain时,Apache错误日志显示它正在寻找/var/www/sub.domain.com而不是/var/www/domain.com_test这让我相信它只会读取第一个规则,然后失败,但我希望它做的是使用满足两个VirtualDocumentRoot规则之一的任何文档根.
Apache通常会选择与HTTP标头中提供的主机名匹配ServerName
或ServerAlias
匹配的第一个虚拟主机Host
.在您的情况下,由于您没有ServerName
指令,Apache应该在IP地址上使用反向DNS查找来伪造服务器名称,并假设反向DNS导致domain.com,它不匹配,Apache然后默认为第一个虚拟主机.听起来很复杂,我知道......最重要的是,您应该使用ServerName
并ServerAlias
明确配置.尝试更像这样的东西:
NameVirtualHost 127.0.0.1ServerName domain.com ServerAlias www.domain.com VirtualDocumentRoot /var/www/%0 ServerName sub.domain.com ServerAlias *.domain.com VirtualDocumentRoot /var/www/%2.%3_%1
这应该使用/var/www/domain.com
的http://domain.com和/var/www/www.domain.com
对http://www.domain.com,这两者都是由第一虚拟主机服务,并/var/www/sub.domain.com
为http://sub.domain.com,/var/www/blah.domain.com
对于HTTP:// blah.domain.com,等等.