禁用 Apache 目录索引未递归应用,我的配置或理解有错误吗?

禁用 Apache 目录索引未递归应用,我的配置或理解有错误吗?

我在 Debian 上运行 Apache(2)。我想禁用 /var/www 目录及其任何子目录中的自动索引。

在 /etc/apache2/conf.d 中我放置了一个包含以下内容的文件:

<Directory /var/www>
Options -Indexes
</Directory>

我印象中该指令将递归应用于 /var/www 的任何子目录,但访问 /var/www/someotherdir(缺少 index.html)时,即使在重新启动 apache(apache2ctl restart)后也会给出目录内容的列表。

我是否误解了这里的递归性并需要使用.htaccess 文件?

此致! :)

编辑 对于互联网:

我检查了我的“主”或“根”配置文件 /etc/apache2/apache2.conf,并按以下顺序找到了以下包含指令:

include mods-enabled/*.load
include mods-enabled/*.conf
include httpd.conf
include ports.conf
include conf.d/
include sites-enabled/

虽然大多数 conf 文件不包含任何与 /var/www 列表选项相关的内容,但 sites-enabled 目录包含一个名为 000-default 的文件,该文件又包含一个虚拟主机帖子,为 /var/www 目录指定一些选项。如下所示:

<VirtualHost *:80>
<Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

根据以下指令合并顺序:http://httpd.apache.org/docs/current/sections.html#mergin,似乎我为 /var/www 在 conf.d/myfile 中指定的指令将被 sites-enabled/000-default 指令覆盖,因为它们指向同一个目录,而且虚拟主机指令最后被处理。

从 sites-enabled/000-default 文件中删除索引选项会关闭 /var/www 子树中的目录列表.因此从这个意义上来说一切似乎都合乎逻辑。

不过,仍然存在一些令人困惑的地方。如果我在 conf.d/myfile 文件中为特定目录(例如 /var/www/exampledir)包含一条指令,则无论虚拟主机指令的内容如何,​​exampledir 的目录列表都会关闭。因此,似乎稍后处理的指令不会覆盖更具体的设置,即使它是先前设置的。我将尝试举一个例子:

在某种“伪配置文件语法”中,假设我按以下顺序包含以下设置:

index off on /var/www (in my conf.d file)
index off on /var/www/exampledir (in my conf.d file)
index on in /var/www (in 000-default file)

那么看起来 /var/www 在所有子目录中都将具有“index on”,除了 /var/www/exampledir,其中指令已递归应用。因此看起来 000-default 文件中的递归设置不会影响更早、更具体命名的目录上的“index on”。

或者,仔细想想,这可能意味着配置文件指令的处理顺序与 Apache 文档链接中提到的一样,从最短到最长,但虚拟主机指令将最后处理每个指定目录并不是在所有其他非虚拟主机指令之后,无论长度如何(直到现在我才明白这一点)。

啊,是的,这也许可以解释一些事情。好吧,如果有人读到这里,恭喜你,祝我们俩好运!:)

答案1

您的设置是正确的,应该可以按预期工作。Options -Indexes例如,也许您正在覆盖目录树中更深的某个位置或另一个 vHost 中的位置。

答案2

应该有一个命令来统治一切!

根据操作系统,httpd.conf 或其他配置文件应该只具有“Options All FollowSymLinks MultiViews”而不是“Options All Indexes FollowSymLinks MultiViews”。

我认为您可能搜索了错误的术语(这很棘手)。它指的是“目录列表”,而不是“索引”。

相关内容