PHP本地环境开启目录浏览功能后,当用户访问没有默认索引文件的目录时,服务器会直接展示该目录下的所有文件和子目录列表,容易导致项目配置、源码等敏感信息泄露,因此关闭目录浏览是本地环境安全配置的重要步骤。不同服务器环境的关闭方式有所区别,下面分别介绍常见环境的操作方法。

Apache服务器关闭目录浏览
Apache服务器默认可能开启目录浏览功能,关闭该功能可以通过修改配置文件实现,有两种常用方式。
方式一:修改httpd.conf主配置文件
找到Apache安装目录下的httpd.conf配置文件,搜索Options相关配置项,默认可能存在Options Indexes FollowSymLinks这样的配置,其中Indexes就是开启目录浏览的参数,将其删除或者替换为-Indexes即可关闭。
修改前配置示例:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
修改后配置示例:
<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
修改完成后重启Apache服务使配置生效,重启命令根据系统不同有所区别,Linux系统一般为:
sudo systemctl restart apache2 # 或者 sudo service httpd restart
方式二:通过.htaccess文件配置
如果服务器开启了AllowOverride权限,也可以在网站根目录下的.htaccess文件中添加配置关闭目录浏览,这种方式不需要修改主配置文件,适合虚拟主机环境。
# 关闭目录浏览 Options -Indexes
Nginx服务器关闭目录浏览
Nginx服务器默认不会开启目录浏览,若之前手动开启了该功能,需要修改nginx.conf或者对应的站点配置文件来关闭。
如果配置中存在autoindex on;这样的配置项,将其改为autoindex off;即可,该配置项就是控制目录浏览开关的参数。
修改前配置示例:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location / {
autoindex on; # 开启目录浏览
index index.html index.php;
}
}
修改后配置示例:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location / {
autoindex off; # 关闭目录浏览
index index.html index.php;
}
}
修改完成后重启Nginx服务生效,重启命令一般为:
sudo systemctl restart nginx # 或者 sudo service nginx restart
PHP内置服务器关闭目录浏览
如果使用PHP内置的开发服务器,默认情况下访问无索引文件的目录也会展示目录列表,关闭该功能的实现方式是自定义路由处理。可以编写一个入口文件,判断请求的目录是否存在默认索引文件,不存在则返回403错误。
入口文件server.php示例:
<?php
$requestUri = $_SERVER['REQUEST_URI'];
$filePath = __DIR__ . $requestUri;
// 如果是目录且不存在默认索引文件
if (is_dir($filePath)) {
$indexFiles = ['index.html', 'index.php', 'default.html'];
$hasIndex = false;
foreach ($indexFiles as $index) {
if (file_exists($filePath . '/' . $index)) {
$hasIndex = true;
break;
}
}
if (!$hasIndex) {
header('HTTP/1.1 403 Forbidden');
echo '403 Forbidden';
exit;
}
}
// 正常处理请求
return false;
启动PHP内置服务器时指定该入口文件:
php -S 127.0.0.1:8000 server.php
配置生效验证
配置完成后,可以访问本地环境中的一个没有默认索引文件的目录,比如127.0.0.1/test_dir,如果返回403 Forbidden或者404错误,说明目录浏览已经成功关闭;如果仍然展示目录下的文件列表,说明配置没有生效,需要检查配置文件修改是否正确、服务是否重启、配置路径是否匹配当前访问的目录。
| 服务器类型 | 核心配置参数 | 生效操作 |
|---|---|---|
| Apache | Options -Indexes | 重启Apache服务 |
| Nginx | autoindex off | 重启Nginx服务 |
| PHP内置服务器 | 自定义入口文件判断 | 重启内置服务器 |