如何禁用目录浏览?


Answers:


420

创建一个.htaccess文件,其中包含以下行:

Options -Indexes

那是一种选择。另一个选择是编辑apache配置文件。

为此,您首先需要使用以下命令将其打开:

vim /etc/httpd/conf/httpd.conf

然后找到以下行:Options Indexes FollowSymLinks

将该行更改为:选项FollowSymLinks

最后保存并退出文件,然后使用以下命令重新启动Apache服务器:

sudo service httpd restart

(您可以在此处获得带有屏幕截图的指南。)


14
甚至可以在实际的.conf文件的<Directory>或<Location>中使用
chrismarx 2014年

1
@chrismarx我要放入哪个.conf文件?我的服务器上似乎未启用.htaccess,但我读过最好还是不要使用它。我确实可以访问所有服务器文件,因为它是vps。
查尔斯·约翰·汤普森三世

1
我遇到了同样的问题,我将带有代码的.htaccess文件添加到了与我的网页相同的目录中,但是它仍然向我发出目录浏览警报。难道我做错了什么?
兰迪·吉尔曼

10
请注意,.htaccess可能已关闭。请检查AllowOverride指令。如果将其设置为None,则将.htaccess其关闭。您可以通过设置将其打开AllowOverride All。更准确地说,All是指所有Apache指令。
朱利安

2
如果您可以控制http.conf,则最好在该位置执行。htaccess
会对

298

最好的方法是使用webserver apache2禁用它。在我的Ubuntu 14.X中- /etc/apache2/apache2.conf从以下位置打开更改

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

然后通过以下方式重新启动apache:

sudo service apache2 reload

这将从apache2服务的所有文件夹中禁用目录列表。


11
'sudo service apache2 reload '就足够了!
doctorlai

2
@Jay我也尝试过“ Options -indexes”,但是Apache无法启动后缀。我正在运行服务器版本:Apache / 2.4.18(Ubuntu)。但是,根据Dung的回答,使用“ Options FollowSymLinks”是可行的。我很好奇您正在运行哪个版本的Apache和OS?也许是版本的东西?
MikeyE

@Jay @MikeyE同样在这里;Apache不会使用-Indexes
Crimbo

1
@Jay @MikeyE如果删除,Apache似乎会重新加载/重新启动FollowSymLinks
Crimbo

2
apachectl configtest添加Options -Indexes FollowSymLinks到httpd.conf 后运行,将显示以下错误:“所有选项都必须以+或-开头,否则可能没有选项。” 因此,什么的工作Options -Indexes +FollowSymLinks
约翰T.

45

除了上述两种方法(编辑/etc/apache2/apache2.conf或在.htaccess文件中添加Options -Indexes)之外,这是另一种方法

a2dismod autoindex

之后重新启动apache2服务器

sudo service apache2 restart

4
您可以a2dismod -f autoindex用于非阻塞命令执行。
КонстантинВан

不错的核选择!这适用于Alias文件夹以及Apache服务的任何其他路径。
kontextify

我应该知道有任何副作用吗?
Naresh Kumar

28

使用以下内容编辑/创建.htaccess文件/galerias

Options -Indexes

目录浏览由mod_autoindex模块提供。


-根目录上的索引不起作用,在apache2.4.33中,我不得不使用@Sarvar Nishonboyev的答案
Felipe Valdes

1
@FelipeValdes请仔细阅读问题和答案。我们不是在谈论根目录,而是在一个子目录,它被要求在.htaccess文件中可用(这不是最有效的方式,但它通常是共享主机帐户或繁忙的系统管理员中的唯一选择)。
阿尔瓦罗·冈萨雷斯

23

您可以将一个名为的空文件index.html放入您不想列出的每个目录中。这有几个优点:

  • 它(通常)要求在服务器上进行零配置。
  • 即使服务器管理员决定在服务器配置中使用“ AllowOverride None”,它也将继续工作。(如果使用.htaccess文件,则可能会为您的用户导致许多“错误500-内部服务器错误”消息!)
  • 它还允许您将文件从一台服务器移动到另一台服务器,而无需再次破坏apache配置。

从理论上讲,自动索引可能由其他文件触发(由DirectoryIndex选项控制),但是我在现实世界中还没有遇到过。


小心!这只能与index.html最初定义的DirectoryIndex指令一起使用
nyedidikeke,

18

重要的事情之一是设置安全的apache Web服务器是禁用目录浏览。默认情况下,apache启用了此功能,但是除非您确实需要它,否则禁用它始终是一个好主意。在apache文件夹中打开httpd.conf文件,并找到如下所示的行:

Options Includes Indexes FollowSymLinks MultiViews

然后删除单词索引并保存文件。重新启动Apache。而已


1
完善。在整个机器上禁用它。为什么默认情况下会启用此功能,我不知道...
eduncan911

1
这在Ubuntu(apache2.conf)上对我有用,但是.htaccess选项-Indexes没有。
丹尼尔·利特尔

这对我在Ubuntu(/etc/apache2/apache2.conf)上有效,但是.htaccess选项-Indexes没有。
user2875289

5

如果您选择修改httpd.conf文件以解决此问题,并且有多个Options伪指令,则必须在每个伪指令之前添加-或+。例:

选项-索引+ FollowSymLinks


3

这不是答案,只是我的经验:

在我的Ubuntu 12.04 apache2上,Indexes在apache2.conf或httpd.conf中都找不到,幸运的是,我在中找到了它sites-available/default。删除后,现在看不到目录列表。可能需要这样做sites-available/default-ssl


2

打开您的.htaccess文件,然后在中输入以下代码

Options -Indexes

输入“ Options -Indexes”字样后,请确保按Enter键(如果使用Mac,则按RETURN键),以便文件以空行结尾。


2

将此添加到您的.htaccess文件中:

Options -Indexes

如果由于某种原因它不起作用,请在您的.htaccess文件中尝试以下操作:

IndexIgnore *

1

完成@GauravKachhadiya的答案:

IndexIgnore *.jpg

表示“仅隐藏索引中的.jpg扩展文件。

IndexIgnore指令使用通配符表达式来匹配目录和文件。

  • 一个星形字符,它匹配字符串中的任何字符,例如:foo或foo.extension,在下面的示例中,我们将关闭目录列表,索引中不会出现文件或目录:

    IndexIgnore *

或者,如果您想在目录列表中隐藏不常用的文件,那么我们可以使用

IndexIgnore *.php

* .php =>匹配以任何字符开头,以.php结尾的字符串

上面的示例隐藏了所有以.php结尾的文件


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.