必须将网站根目录设为web子目录,否则服务器无法执行index.php而显示目录列表;需确认directoryindex包含index.php、.htaccess存在且allowoverride all已启用,并确保php模块正确加载。

访问首页只看到目录列表,说明 Web 服务器没执行 index.php,而是把 web/ 目录当成了静态文件夹直接列出来了。这不是 Yii2 没装好,是服务器根本没走到框架入口。
确认网站根目录是否指向 web 子目录
Yii2 要求 Web 服务器**只能暴露 web/ 目录**,其他如 config/、runtime/、vendor/ 绝不能被外部访问。phpEnv、宝塔等环境新建站点时,默认根目录常设为项目根(如 D:\phpenv\www\myapp),这会导致两个问题:一是敏感文件可能泄露,二是 index.php 不被识别为默认首页。
- 进入 phpEnv 控制面板 → 「网站管理」→ 编辑对应站点
- 将「网站目录」明确改为
D:\phpenv\www\myapp\web(末尾带web) - 检查该路径下是否存在
index.php,且内容是 Yii2 标准入口(含require __DIR__ . '/../vendor/autoload.php';)
检查 Apache 是否启用 DirectoryIndex 并包含 index.php
即使根目录设对了,如果 Apache 没配置默认首页类型,仍会返回目录列表。phpEnv 内置的 Apache 默认只认 index.html,不自动加 index.php。
- 打开
phpenv\apache\conf\httpd.conf - 查找
DirectoryIndex行,确保它包含index.php,例如:DirectoryIndex index.php index.html - 保存后重启 Apache
验证 .htaccess 是否生效(仅 Apache 场景)
Yii2 的 web/ 目录下自带 .htaccess,用于把所有请求重写到 index.php。但它要起作用,必须满足两个前提:文件存在 + Apache 允许解析。
- 确认
web/.htaccess文件存在且内容未被清空(标准内容以RewriteEngine On开头) - 在站点对应的虚拟主机配置中(或全局
httpd.conf),确保该目录启用了AllowOverride All
(不是None或FileInfo) - Windows 下注意:Apache 2.4+ 需用
Require all granted;旧版需配Order allow,deny+Allow from all
排除 PHP 解析模块未加载的情况
如果 Apache 完全不处理 .php 文件,也会退回到显示目录。常见于 phpEnv 切换 PHP 版本后未同步启用模块。
- 查看
phpenv\apache\conf\extra\php.ini是否被实际加载(运行phpinfo()页面确认) - 检查
httpd.conf中是否已启用php_module,类似:LoadModule php_module "D:/phpenv/php/php8.1/php8apache2_4.dll" - 确认
AddHandler和SetHandler规则已正确绑定.php后缀











