在 Ubuntu 的 Apache2 中,目录浏览(即没有默认首页文件时,列出目录下所有文件)是由 Options Indexes 指令控制的。要禁止目录浏览,只需将该选项改为 -Indexes 即可。
以下是几种常用的方法:
打开 Apache 配置文件
你可以修改全局配置文件,或者具体的虚拟主机配置文件。
sudo nano /etc/apache2/apache2.conf
或者编辑默认的虚拟主机配置(如果你使用了自定义的站点配置,请编辑对应的文件):
sudo nano /etc/apache2/sites-available/000-default.conf
找到目录配置块
在 /etc/apache2/apache2.conf 中,通常会有类似这样的配置(Ubuntu 默认针对 /var/www 目录):
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
或者在虚拟主机配置(000-default.conf 等)的 <VirtualHost> 标签内,针对 DocumentRoot(如 /var/www/html)的 <Directory> 配置。
禁止目录浏览
将 Options 行中的 Indexes 改为 -Indexes(或者直接删掉 Indexes 并显式写上 -Indexes):
<Directory /var/www/>
# 把 Indexes 改为 -Indexes,表示关闭目录列表
Options -Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
注:FollowSymLinks 是允许跟随符号链接,可以保留。核心就是前面的减号 - 禁用了 Indexes 功能。
保存并检查配置、重新加载 Apache
按 Ctrl+O 保存,Ctrl+X 退出。然后执行:
# 检查配置文件语法是否正确
sudo apache2ctl configtest
# 重新加载 Apache 使配置生效(无需完全重启)
sudo systemctl reload apache2
如果 configtest 返回 Syntax OK,并且没有报错,说明配置成功。
.htaccess 文件(针对特定目录,无需重启服务)如果你只想禁止某个特定目录(及其子目录)的浏览,且不想改动主配置文件,可以使用 .htaccess 文件。
确保 Apache 允许 .htaccess 覆盖配置
在 Apache 的主配置或虚拟主机配置的 <Directory> 块中,确保 AllowOverride 允许覆盖选项(通常设为 All 或至少 Options):
<Directory /var/www/html>
AllowOverride Options
# 或者 AllowOverride All
</Directory>
如果修改了这里,记得 sudo systemctl reload apache2。
在目标目录下创建/编辑 .htaccess 文件
比如你想禁止 /var/www/html/uploads 目录的浏览,就在该目录下操作:
sudo nano /var/www/html/uploads/.htaccess
在文件中加入以下内容并保存:
Options -Indexes
这样设置后,访问该目录(如果没有默认首页)就会直接返回 403 Forbidden,而不会列出文件。
如果你确定服务器上所有网站都永远不需要目录浏览功能,可以直接禁用 Apache 的 autoindex 模块:
sudo a2dismod autoindex
sudo systemctl restart apache2
(不过一般情况下,用第一种方法的 -Indexes 就足够了,禁用模块并不是必须的。)
index.html / index.php 的测试文件夹:mkdir /var/www/html/testdir
http://你的服务器IP/testdir/。403 Forbidden 错误页面,说明目录浏览已成功禁止。安全提示:禁止目录浏览是 Web 服务器安全加固的基本操作之一,可以有效避免源码结构、备份文件等敏感信息被泄露,建议生产环境务必开启。