index指令控制nginx默认首页文件匹配顺序,必须置于server或location块内,优先级从左到右,如index index.php index.html表示先找index.php;修改后需重启nginx生效,且需配合php处理块(如location ~ .php$)才能正确执行php文件。

nginx.conf 里 index 指令控制首页顺序,不是 PHP 或 phpEnv 配置
phpEnv 是 Windows 下的集成环境套件,底层用的是 Nginx,所以首页顺序完全由 Nginx 的 index 指令决定,PHP 本身不参与这个过程。修改位置在 Nginx 主配置或站点配置中,常见路径是 phpEnv\nginx\conf\nginx.conf 或 phpEnv\nginx\vhosts\your-site.conf。
典型错误是去改 php.ini 或 .htaccess(Nginx 不读这个),或者以为改了 phpEnv 界面里的“默认文档”就生效——那个只是界面提示,不写入 Nginx 配置。
-
index指令必须写在server块或location /块内,单独放在全局(http块)无效 - 顺序越靠前优先级越高,比如
index index.html index.php表示先找index.html,找不到才找index.php - 修改后必须重启 Nginx 才生效,仅重载(
nginx -s reload)有时因权限或路径问题失败,建议直接用 phpEnv 界面点「重启 Nginx」
如何确认当前生效的 index 配置
容易误判“已修改但没效果”,其实是被其他配置覆盖了。Nginx 会按层级合并指令,location / 里的 index 会覆盖 server 级的,而子目录的 location /api/ 又可能覆盖根路径。
最稳妥的方式是打开你实际使用的站点配置文件(不是主 nginx.conf),搜索 index,看是否已存在且顺序符合预期。如果没找到,说明走的是默认值:index index.html index.htm —— 这就是为什么你放了 index.php 却打不开,它根本不在列表里。
- 检查时注意注释行,有些配置会把
index index.php写在#后面,实际不生效 - Windows 下路径分隔符不影响,但空格和分号要严格:写成
index index.php ;会报错,index "index.php"也不合法,不能加引号 - 可以用
nginx -t在命令行验证语法,phpEnv 自带的终端里执行即可,报错信息会明确指出哪一行、哪个参数有问题
常见需求对应写法
多数人想让 index.php 优先于 HTML 文件,或者支持多个入口名(如 home.php)。这都靠调整 index 后的文件名列表顺序实现。
例如,要求访问 http://localhost/ 时自动加载 index.php,即使同目录下有 index.html 也忽略:
index index.php index.html index.htm;
再比如项目用了前后端分离,希望优先尝试 app.html(SPA fallback),再退到 PHP:
index app.html index.php index.html;
- 所有文件名必须带扩展名,写
index index或index /index.php都是错的 - 不支持通配符或正则,
index *.php无效 - 如果同时需要支持大小写混合(如
Index.php),得显式列出来:index index.php Index.php
修改后仍 403 或 404?重点查这两处
改完 index 还打不开,大概率不是顺序问题,而是权限或路径解析卡住了。
Nginx 默认不会自动把请求转发给 PHP-FPM 处理,它只负责匹配静态文件。如果 index.php 被识别为静态资源(比如缺少 location ~ \.php$ 块),就会返回源码或 403;如果 PHP-FPM 没启动或 socket 路径不对,就会 502,但用户常误以为是 404。
- 确认配置中存在类似
location ~ \.php$ { ... fastcgi_pass ... }的块,且该块未被location /的try_files规则意外跳过 - 检查
root指令是否指向正确目录,比如写成了root "D:/phpEnv/www";却忘了 Windows 路径要用正斜杠或双反斜杠,单反斜杠在配置里会被转义 - phpEnv 的 Nginx 版本较老(如 1.14),某些新写法(如
fastcgi_param SCRIPT_FILENAME $request_filename;)不兼容,建议统一用$document_root$fastcgi_script_name
顺序本身很简单,难的是配置分散、层级叠加、错误反馈模糊。盯住 nginx -t 输出和 error.log 里第一行报错,比反复猜更省时间。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











