温馨提示×

ubuntu apache2如何禁止目录浏览

小樊
39
2026-08-27 21:55:07
栏目: 智能运维

在 Ubuntu 的 Apache2 中,目录浏览(即没有默认首页文件时,列出目录下所有文件)是由 Options Indexes 指令控制的。要禁止目录浏览,只需将该选项改为 -Indexes 即可。

以下是几种常用的方法:

方法一:修改 Apache 配置文件(推荐,全局或指定目录生效)

  1. 打开 Apache 配置文件
    你可以修改全局配置文件,或者具体的虚拟主机配置文件。

    sudo nano /etc/apache2/apache2.conf
    

    或者编辑默认的虚拟主机配置(如果你使用了自定义的站点配置,请编辑对应的文件):

    sudo nano /etc/apache2/sites-available/000-default.conf
    
  2. 找到目录配置块
    /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> 配置。

  3. 禁止目录浏览
    Options 行中的 Indexes 改为 -Indexes(或者直接删掉 Indexes 并显式写上 -Indexes):

    <Directory /var/www/>
        # 把 Indexes 改为 -Indexes,表示关闭目录列表
        Options -Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    

    注:FollowSymLinks 是允许跟随符号链接,可以保留。核心就是前面的减号 - 禁用了 Indexes 功能。

  4. 保存并检查配置、重新加载 Apache
    Ctrl+O 保存,Ctrl+X 退出。然后执行:

    # 检查配置文件语法是否正确
    sudo apache2ctl configtest
    
    # 重新加载 Apache 使配置生效(无需完全重启)
    sudo systemctl reload apache2
    

    如果 configtest 返回 Syntax OK,并且没有报错,说明配置成功。


方法二:使用 .htaccess 文件(针对特定目录,无需重启服务)

如果你只想禁止某个特定目录(及其子目录)的浏览,且不想改动主配置文件,可以使用 .htaccess 文件。

  1. 确保 Apache 允许 .htaccess 覆盖配置
    在 Apache 的主配置或虚拟主机配置的 <Directory> 块中,确保 AllowOverride 允许覆盖选项(通常设为 All 或至少 Options):

    <Directory /var/www/html>
        AllowOverride Options
        # 或者 AllowOverride All
    </Directory>
    

    如果修改了这里,记得 sudo systemctl reload apache2

  2. 在目标目录下创建/编辑 .htaccess 文件
    比如你想禁止 /var/www/html/uploads 目录的浏览,就在该目录下操作:

    sudo nano /var/www/html/uploads/.htaccess
    

    在文件中加入以下内容并保存:

    Options -Indexes
    

    这样设置后,访问该目录(如果没有默认首页)就会直接返回 403 Forbidden,而不会列出文件。


方法三(进阶):彻底禁用 autoindex 模块

如果你确定服务器上所有网站都永远不需要目录浏览功能,可以直接禁用 Apache 的 autoindex 模块:

sudo a2dismod autoindex
sudo systemctl restart apache2

(不过一般情况下,用第一种方法的 -Indexes 就足够了,禁用模块并不是必须的。)


如何验证是否生效?

  1. 在你的网站根目录下,新建一个没有 index.html / index.php 的测试文件夹:
    mkdir /var/www/html/testdir
    
  2. 在浏览器中访问 http://你的服务器IP/testdir/
  3. 修改前:你会看到文件列表(目录浏览)。
  4. 修改后:你应该看到 403 Forbidden 错误页面,说明目录浏览已成功禁止。

安全提示:禁止目录浏览是 Web 服务器安全加固的基本操作之一,可以有效避免源码结构、备份文件等敏感信息被泄露,建议生产环境务必开启。

0