Apache 2.4:VirtualHost 中的选项 +Indexes

Apache 2.4:VirtualHost 中的选项 +Indexes

我无法让 Apache 识别 VirtualHost 块内的 Options 指令。以下代码片段是我所能做的最简单的代码,它将重现错误 - 其余配置是现有的 Deiban Apache 2.4。

<VirtualHost *:80>
        ServerName example
        DocumentRoot /home/test/ #owner www-data:www-data
        Options +Indexes
        <Location />
                Require all granted
        </Location>
</VirtualHost>

这将失败并出现 403 Forbidden 错误,相应日志中会出现以下行:

[Sun Jun 26 15:06:30.378689 2016] [autoindex:error] [pid 15899:tid 140693629712128] [client 192.168.0.155:52850] AH01276: Cannot serve directory /home/test/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive

然而,将Options +Indexes指令放在容器内<Location />将会修复它并且将提供自动生成的索引。

我想知道为什么必须将其放在里面<Location />才能工作,而不仅仅是<VirtualHost>。Apache 2.4 文档说该Options指令可以放在以下上下文中[1]

上下文:服务器配置、虚拟主机、目录、.htaccess

那么为什么它在里面不工作呢VirtualHost


编辑#1

输出apachectl -S

AH00557: apache2: apr_sockaddr_info_get() failed for garnet
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
VirtualHost configuration:
*:80                   garnet.cat (/etc/apache2/sites-enabled/test.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex watchdog-callback: using_defaults
Mutex proxy: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33

关于Options配置文件中其他地方可能的其他指令:

我找不到任何内容。我曾经在配置文件中root@garnet:/etc/apache2# grep -P -Rni '\soptions\s' .查找该指令的出现。所有匹配项都在注释字符串或不相关的块中。无论如何,Options<Directory>VirtualHost 块不会覆盖其外部指定的指令

答案1

这很可能是一个合并问题,详细信息如下:http://httpd.apache.org/docs/current/sections.html#merging

因此,一般来说,更具体的配置部分行DirectoryLocation位置可以覆盖虚拟主机级别的配置,而虚拟主机级别的配置又可以覆盖全局级别的配置。但是,当您深入到更具体的配置块时,它们是如何处理的,如上面的链接所述。

这些级别在 Apache 术语中被称为上下文,熟悉上下文的含义是一个好主意,呃...好吧...上下文 :-)。更多信息请见此处:http://httpd.apache.org/docs/current/mod/directive-dict.html#Context

正如评论中所提到的,在全局上下文中寻找可能与LocationLocationMatch的 URI 路径匹配的块,或者Directory可能DirectoryMatch匹配的块,/home/test/或者目录树中位于其上方的任何内容。

相关内容