尝试了几种不同的 DocumentRoot 后,Apache 虚拟主机权限被拒绝。我下一步该尝试什么?

尝试了几种不同的 DocumentRoot 后,Apache 虚拟主机权限被拒绝。我下一步该尝试什么?

我有一个在 Mac OS X Leopard 下运行的自编译版 Apache 2。它默认安装在 /usr/local/apache2 上,运行良好。

今天我想添加一个虚拟主机,这样我就可以用域名访问特定的文件夹http://binarytales.local

所以我添加了127.0.0.1 binarytales.local/etc/hosts刷新了 DNS 缓存,然后,我可以通过该地址访问我的服务器。

我希望能够通过我新创建的本地域名访问我工作 Web 服务器中的子文件夹。因此我设置了以下 vhosts 文件

NameVirtualHost *:80

<VirtualHost *:80>
    DocumentRoot /usr/local/apache2/htdocs
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /usr/local/apache2/htdocs/ProjectX
    ServerName binarytales.local
</VirtualHost>

浏览到localhost运行正常,我获取了以前经常获取的文件。浏览到 时binarytales.local出现内部服务器错误。

我做了一些调查,发现我已将 htdocs 设置为符号链接,/Users/me/Sites因此我尝试将 vhost 设置为

<VirtualHost *:80>
    DocumentRoot /Users/me/Sites/ProjectX
    ServerName binarytales.local
</VirtualHost>

这也不起作用。现在我得到了Forbidden You don't have permission to access / on this server.

因此我尝试了一下DocumentRoot /Users/me/Sites,但得到了同样的禁止信息。

最后我尝试了

DocumentRoot /usr/local/apache2/htdocs2 服务器名称 binarytales.local

/usr/local/apache2/htdocs2的符号链接在哪里Users/me/Sites/ProjectX?我也尝试了Users/me/Sites。我得到了同样的“禁止”错误。

我检查了所有内容上的用户和组设置,除了“Users/me/Sites/”中的内容(即 me/wheel)外,其他内容均为 root/wheel。所有主管对每个人都是 chmod -x。

我完全陷入困境,不知道下一步该做什么!


我的问题标题很糟糕。请将其更改为/建议更好的内容。

答案1

好的,大约 5 分钟后我修复了这个问题,方法是:

<Directory "/usr/local/apache2/htdocs/Binarytales">
    Options Indexes FollowSymLinks  
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

在我的虚拟主机声明中。所以最后它读起来像这样:

名称虚拟主机 *:80

<VirtualHost *:80>
    DocumentRoot /usr/local/apache2/htdocs
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /usr/local/apache2/htdocs/Binarytales
    ServerName binarytales.local

    <Directory "/usr/local/apache2/htdocs/Binarytales">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

我认为这里有神奇的功效,Options ... FollowSymLinks但如果有人能很好地解释为什么它有效,请告诉我,或者是否有更好/替代的解决方案。

答案2

我会bind先尝试安装。假设它在 Mac OS X 上可以像在 Linux 上一样工作:

mount --bind /path/one /path/two

相关内容