我有多个项目,希望使用 ApacheVirtualDocumentRoot
设置来提供服务使用 Apache 的mod_vhost_alias
模块这样每个项目都有自己的域名。例如:
http://site1.local
居住在/Users/stu/Sites/Project1/site1_app/
http://prox.local
居住在/Users/stu/Sites/AlphaProX/prox_app/
我有大约 20 个这样的条目,我很好奇我是否可以进行此设置。我目前有这个 VirtualHost 条目无法正常工作:
<Virtualhost *:80>
VirtualDocumentRoot "/Users/stu/Sites/*/%1/"
ServerName vhosts.local
ServerAlias *.local
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
ErrorLog "/private/var/log/apache2/vhosts-error_log"
<Directory "/Users/stu/Sites/*">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</Virtualhost>
我的语法哪里错误了?
答案1
不可以,因为您无法这样做,因为 Apache 无法确定路径名的Project1
或部分。AlphaProX
这些字符串必须位于 URL 中,或者不能位于路径中。如果路径是这样的,那么它会起作用,/Users/stu/Sites/prox/prox_app/
因为现在使用了变量字符串prox
。但否则 Apache 不知道在 下查找AlphaProX/
,您的VirtualDocumentRoot "/Users/stu/Sites/*
行将不起作用。(Apache 实际上是在寻找名为 的目录*/
)
你可以通过创建如下目录来实现这/Users/stu/Sites/vhost_aliases
一点符号链接该目录下的实际项目,例如:
mkdir -p /Users/stu/Sites/vhost_aliases
cd /Users/stu/Sites/vhost_aliases
ln -s ../site1_app
ln -s ../AlphaProX/prox_app
然后,你会希望你的httpd.conf
文件看起来像这样:
<Virtualhost *:80>
VirtualDocumentRoot "/Users/stu/Sites/vhost_aliases/%1_app/"
ServerName vhosts.local
ServerAlias *.local
UseCanonicalName Off
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
ErrorLog "/private/var/log/apache2/vhosts-error_log"
<Directory "/Users/stu/Sites/vhost_aliases">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</Virtualhost>
具体来说,这一行:
VirtualDocumentRoot "/Users/stu/Sites/vhost_aliases/%1_app/"