在 OSX 上设置 Apache 自动虚拟主机

在 OSX 上设置 Apache 自动虚拟主机

我有多个项目,希望使用 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/"

相关内容