允许 Apache 2.2 中特定 VirtualHost 的目录查看/遍历

允许 Apache 2.2 中特定 VirtualHost 的目录查看/遍历

我已经配置了以下虚拟主机:

<VirtualHost *:80>
    DocumentRoot /var/www/myvhost
    ServerName myv.host.com
    ServerAlias myv.host.com
    ErrorLog logs/myvhost-error_log
    CustomLog logs/myvhost-access_log combined
    ServerAdmin [email protected]
    <Directory /var/www/myvhost>
        AllowOverride All
        Options +Indexes
    </Directory>
</VirtualHost>

配置出现从工具的角度来看是正确的apachectl

但是,我无法获取该虚拟主机上的目录列表:

Forbidden

You don't have permission to access / on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

错误日志显示以下内容:

[Wed Mar 07 19:23:33 2012] [error] [client 66.6.145.214] Directory index forbidden by Options directive: /var/www/******

更新2

最近,以下内容出现在error.log中:

[Wed Mar 07 20:16:10 2012] [error] [client 192.152.243.233] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/error/noindex.html

更新3

今天,以下人员将被踢出:

[Thu Mar 08 14:05:56 2012] [error] [client 66.6.145.214] Directory index forbidden by Options directive: /var/www/<mydir>
[Thu Mar 08 14:05:56 2012] [error] [client 66.6.145.214] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/error/noindex.html
[Thu Mar 08 14:05:57 2012] [error] [client 66.6.145.214] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

这是修改vhosts.conf文件之后的结果:

<VirtualHost *:80>
    DocumentRoot /var/www/<mydir>
    ServerName myhost
    ServerAlias myhost
    ErrorLog logs/myhost-error_log
    CustomLog logs/myhost-access_log combined
    ServerAdmin admin@myhost
    <Directory "/var/www/<mydir>">
         Options All +Indexes +FollowSymLinks
         AllowOverride All
         Order allow,deny
         Allow from all
    </Directory>
</VirtualHost>

缺什么?

更新 4

全部根目录的子目录正确地列出目录 - 它是仅有的不能的根。

答案1

403 表示找到了资源。请检查 apache 是否对r-x文档根目录及其上层的所有目录和r--其中的文件具有某种级别的权限。

尝试将目录指令更改为

<Directory /var/www/myvhost>
    AllowOverride All
    Options +Indexes
    Order allow,deny 
    Allow from all
</Directory>

答案2

我今天遇到了类似的问题,看到了类似上面显示的错误:

[Wed Oct 17 14:19:08 2012] [error] [client 123.66.66.22] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /var/www/mysite/

混合使用带有和不带有 +/- 的选项是有问题的,请注意Apache 文档中的选项

将带有 + 或 - 的选项与不带有 + 或 - 的选项混合在一起不是有效语法,并且会在服务器启动时通过语法检查被拒绝并中止。

另外,有效使用不带 +/- 的指令的效果是删除该目录的所有其他先前设置的指令。

我使用了不带 + 的索引,并出现了上面复制的错误。

既然您说您没有使用任何 .htaccess 文件,为什么不将 Directory 指令更改为以下内容:

<Directory /var/www/myvhost>
    AllowOverride None
    Options +Indexes
    Order allow,deny
    Allow from all
</Directory>

答案3

我的解决方案(截至 2012 年 3 月 21 日)

  • 将所有内容移动到子目录
  • 在根目录中创建一个重定向index.html文件,重新加载到子目录

我仍然想知道为什么我不能仅仅遍历目录本身,但目前这是可行的。

答案4

在我的 CentOS 5/6/7 系统上,这个问题是由系统自带的默认 /etc/httpd/conf.d/welcome.conf 中的某种冲突引起的。注释掉 welcome.conf 的每一行并重新启动 Web 服务器,目录索引就会在 Web 根目录中可见。这似乎只是默认 Web 服务器配置中的一个错误,至少在 Red Hat/CentOS 系统上是这样的,但也可能在其他系统上也是如此。您的系统可能遇到过类似的问题。

相关内容