我正在尝试为我的虚拟主机创建一个后备。我的配置如下所示:
# Fetch all pre-defined hosts
Include "conf/extra/vhosts/*.conf"
# Fallback
NameVirtualHost *:80
<Directory "C:/LocalServer/usr">
Options Indexes FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<VirtualHost *:80>
VirtualDocumentRoot "C:/LocalServer/usr/%-1/projects/%-2+/public/"
</VirtualHost>
这里的目标如下:如果我尝试访问http://test.lab/
,我希望它自动选择以下目录:C:/LocalServer/usr/lab/projects/test/public/
.
现在,我已经创建了文件夹和一个空的索引文件 ( index.php
)。尽管如此,Apache 一直向我显示一个空的目录索引(“索引”)。
不太清楚现在该做什么。尝试了一些东西,但似乎都没有。
有任何想法吗?
更新 - 6 月 1 日
我现在正在使用此代码,基于第一个答案(嗯,唯一一个):
<VirtualHost *:80>
UseCanonicalName Off
ServerAlias *.lab
VirtualDocumentRoot "C:/LocalServer/%2/%1/public"
<Directory "C:/LocalServer/%2/%1/public">
Options Indexes FollowSymLinks Includes
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
我现在从 Apache收到访问禁止错误。通常,当目录不存在时,人们肯定会收到此错误吗?确实存在C:/LocalServer/lab/test/public
,并且目录中存在一个空。index.php
public
一般错误日志中的错误:[client 127.0.0.1:49342] AH01797: client denied by server configuration: C:/LocalServer/lab/test/public/
如果我删除该<Directory/>
组,则没有任何变化。我仍然得到错误。(我什至可以%n
在那个组中使用吗?)
快速说明:
它以前不起作用的原因是由于我通过Include "conf/extra/vhosts/*.conf"
指令导入了其他虚拟主机。将其注释掉(从而使实验室规则成为唯一的规则)引发了访问禁止错误。
另请注意,我不再使用该usr
文件夹 - 每个 Lab 现在都位于该lab
文件夹中,位于LocalServer
.
更新 2
似乎该<Directory/>
块不允许插入变量,就像VirtualDocumentRoot
那样。
更新 3 - 找到解决方案
它现在正在工作 - 如果没有帮助,将无法做到这一点。这是最终的代码:
<VirtualHost lab:80>
UseCanonicalName Off
ServerAlias *.lab
VirtualDocumentRoot "C:/LocalServer/%2/%1/public"
<Directory "C:/LocalServer/lab/*/public">
Options Indexes FollowSymLinks
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
</VirtualHost>
更新 4(2015 年 4 月)
新指令,对于那些感兴趣的人(使用最新的 Apache 2.4):
<VirtualHost *:80>
UseCanonicalName Off
ServerAlias *.local
VirtualDocumentRoot "D:/home/%-2+/public_html"
<Directory "D:/home/*/public_html">
Require all granted
AllowOverride All
Options Indexes FollowSymLinks
</Directory>
</VirtualHost>
这与Acrylic DNS Proxy的结合,创造了奇迹。
更新 5(2016 年 12 月)
我现在正在使用宏方法。
# Directory Macro - Default Directory configuration on a per-vhost basis
<Macro Directory $dir>
<Directory "z:/var/www/$dir/public_html">
Require all granted
Options Includes Indexes FollowSymLinks
AllowOverride All
</Directory>
</Macro>
# LocalSub Macro - For specific *.*.local subs that require their own root
<Macro LocalSub $sub $domain>
<VirtualHost 127.0.0.1>
ServerName $sub.$domain.local
DocumentRoot “z:/var/www/$domain/$sub/public_html”
Use Directory $domain/$sub
</VirtualHost>
</Macro>
Use LocalSub blog rockettpw
# Main virtual host
<VirtualHost 127.0.0.1>
UseCanonicalName Off
ServerAlias *.local *.*.local
VirtualDocumentRoot “z:/var/www/%-2/public_html”
Use Directory *
</VirtualHost>