PHP本地环境目录浏览需按Web服务器类型处理:Apache用.htaccess写Options -Indexes;nginx在server块中设autoindex off并重载;PHP内置服务器本身不支持目录浏览,无需设置。

PHP本地环境默认开启目录浏览(Directory Listing),访问一个空的 index.php 或缺失入口文件的目录时,会直接列出所有文件——这在开发中不安全,也容易暴露敏感文件。
Apache环境下用 .htaccess 关闭目录浏览
这是最常用、最直接的方式,适用于 XAMPP、WAMP、MAMP 等集成环境(只要 Apache 启用了 mod_rewrite 和允许 .htaccess 覆盖)。
- 在网站根目录(如
C:\xampp\htdocs\myproject\)新建或编辑.htaccess - 写入以下内容:
Options -Indexes
无需重启 Apache,保存后立即生效。如果仍能看到列表,检查 Apache 配置中是否禁用了 AllowOverride ——确保对应 块里有 AllowOverride All。
nginx 环境下关闭 autoindex
如果你用的是 Laragon、XAMPP for nginx 或手动配置的 nginx,目录浏览由 autoindex 指令控制,默认可能为 on。
立即学习“PHP免费学习笔记(深入)”;
- 找到站点对应的 server 块(通常在
nginx.conf或sites-enabled/xxx.conf) - 确认没有
autoindex on;,并显式关闭:
location / {
autoindex off;
}
修改后必须执行 nginx -t 测试配置,再运行 nginx -s reload 重载,否则不生效。
PHP 内置服务器无法关闭目录浏览(根本没这个功能)
用 php -S localhost:8000 启动的内置服务器,不支持目录浏览,也不支持关闭它——因为它压根就不提供目录列表功能。但它有另一个问题:当请求路径不匹配路由回调时,会返回 404;而如果没写路由逻辑,又恰好请求了子目录,它会尝试读取该目录下的 index.php ——但不会列出文件。
- 也就是说:
php -S本身是安全的,无需额外设置 - 但如果你看到“Index of /”,那说明你其实不是在用内置服务器,而是误连到了后台运行的 Apache 或 nginx
- 用
ps aux | grep php(macOS/Linux)或任务管理器(Windows)确认进程
真正容易被忽略的是:很多本地环境(尤其是旧版 XAMPP)的 httpd.conf 里,Options Indexes FollowSymLinks 是全局开启的,仅靠子目录下 .htaccess 可能被上级配置覆盖。遇到关不掉的情况,优先查主配置里的 Options 是否被强制继承。











