在Linux系统上使用Apache2有一种方法可以使用mod_vhost_alias来创build多个VirtualDocumentRoot?
这是我目前正在使用的命名约定,并希望继续使用:
host directory 127.0.0.1 domain domain.com 127.0.0.1 sub.domain domain.com_sub
然后在我的虚拟主机部分的httpd.conf中有:
NameVirtualHost 127.0.0.1 <VirtualHost 127.0.0.1> VirtualDocumentRoot /var/www/%0.0.com </VirtualHost> <VirtualHost 127.0.0.1> VirtualDocumentRoot /var/www/%2.0.com_%1 </VirtualHost>
这个问题是当我访问sub.domain Apache错误日志显示它正在寻找/var/www/sub.domain.com而不是/var/www/domain.com_test,这导致我相信它只读取第一个规则,然后失败,但我想要做的是使用任何满足两个VirtualDocumentRoot规则的任何文档根。
Apache通常会选择serverName
或serverAlias
与Host
HTTP头中提供的主机名相匹配的第一个虚拟主机。 在你的情况下,因为你没有serverName
指令,Apache应该使用IP地址上的反向DNS查找来伪造服务器名称,并假设反向DNS导致domain.com,这不匹配,Apache然后默认为第一个虚拟主机。 听起来很复杂,我知道…底线是,你应该使用serverName
和serverAlias
来明确配置。 尝试更像这样的事情:
NameVirtualHost 127.0.0.1 <VirtualHost 127.0.0.1> serverName domain.com serverAlias www.domain.com VirtualDocumentRoot /var/www/%0 </VirtualHost> <VirtualHost 127.0.0.1> serverName sub.domain.com serverAlias *.domain.com VirtualDocumentRoot /var/www/%2.%3_%1 </VirtualHost>
这应该使用http://domain.com的 /var/www/www.domain.com
和http://www.domain.com的 /var/www/www.domain.com
,两者都由第一个虚拟主机, http : /var/www/blah.domain.com
为/var/www/sub.domain.com
为/var/www/blah.domain.com
,依此类推。
当你想放置一个'。'时,你必须限定反向引用。 在文件路径中。 所以你需要像这样:
VirtualDocumentRoot /var/www/%2.0.%3_%1
关于OP和设置“/ var / www / html”的问题:
我遇到的问题是使用%1而不是%2。 这是我的工作示例:
serverAlias www.*.org.au UseCanonicalName Off VirtualDocumentRoot /path/to/sites/%2/pub
希望帮助别人!
我阅读了mod_vhost_alias文档中的 “目录名称插值” 文档 。
我注意到这个配置是$ _SERVER ['DOCUMENT_ROOT']指向/ var / www / html而不是虚拟主机的doc根目录。 奇怪的。
更新(2010-07-24):
我刚刚写了一篇博客文章如何设置您的http证明服务器http://www.devcha.com/2010/07/how-to-setup-your-http-proof-server.html
我终于找到了一个允许灵活的子域创建的配置。
请参阅mod_vhost_alias上的 apache文档
如果您的根开发域包含3个部分,如dev.example.com,则可以使用%-4+
作为根域之前所有内容的占位符。 如果它有4个部分,使用%-5+
。
<VirtualHost *:80> VirtualDocumentRoot "/var/www/%-4+/webroot" serverName www.dev.example.com serverAlias *.dev.example.com php_admin_value auto_prepend_file /var/www/setdocroot.php </VirtualHost>
这样,您可以创建一个名为/var/www/sub.domain/webroot
的目录,并使用url sub.domain.dev.example.com
访问它。
php_admin_value auto_prepend_file /var/www/setdocroot.php
行php_admin_value auto_prepend_file /var/www/setdocroot.php
修复了一些系统上的文档根目录,比如OSX 10.9+
这里是setdocroot.php
的内容:
<?php $_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']); ?>