actionIndex访问不到主因是请求未进入控制器,需先确认是否启用enablePrettyUrl、PATH_INFO是否正确传递、Nginx/Apache重写配置是否生效、前后端urlManager是否分离、入口脚本路径是否正确、defaultRoute是否被覆盖、SiteController文件名大小写是否准确、AccessControl是否拦截,以及错误显示是否开启。

actionIndex 访问不到,大概率不是方法写错了,而是请求根本没进到控制器——要么路由没匹配上,要么控制器压根没被加载。
检查 urlManager 是否启用且规则生效
Yii2 默认不启用美化 URL,actionIndex 要能通过 /site 或 /site/index 访问,必须满足:'enablePrettyUrl' => true 且 Web 服务器正确传递了 PATH_INFO。
- Nginx 必须配置
fastcgi_split_path_info ^(.+\.php)(/.+)$;和fastcgi_param PATH_INFO $fastcgi_path_info;,否则$_SERVER['PATH_INFO']为空,Yii 拿不到site/index - Apache 需确保
.htaccess在web/目录下且AllowOverride All已开启 - 高级模板中,前后端的
urlManager配置常被共用,但frontend/web和backend/web的模块前缀不同,规则不匹配就会 404
确认入口脚本是否真执行到了 SiteController
直接访问带 index.php 的完整路径,比如:http://your.site/frontend/web/index.php/site/index。如果这个能打开,说明 actionIndex 本身没问题;打不开则问题在更底层。
- 检查
web/index.php中require __DIR__ . '/../vendor/autoload.php';是否成功——PHP 错误日志里出现Failed opening required 'vendor/autoload.php'就是 Composer 未安装或路径错 - 确认
config/web.php的defaultRoute没被意外覆盖成其他值(如'admin/default') - 查看
SiteController文件名是否为SiteController.php(大小写敏感,Linux 下尤其关键)
AccessControl 拦截后静默跳转或返回 403
即使 actionIndex 存在,也可能被行为拦在门外,不报错也不执行,只返回空白页或 403。
- 检查控制器中
behaviors()是否配置了AccessControl,且rules里没给index动作放行 - 若用了
'roles' => ['@']却未登录,会抛ForbiddenHttpException,但默认不提示——需配errorAction或前端提前判断Yii::$app->user->isGuest - 调试时临时注释掉
AccessControl行为,看能否访问,可快速定位是不是权限卡住
最易忽略的一点:开发时开了 YII_DEBUG = true,但没开 error_reporting(E_ALL) 和 ini_set('display_errors', '1'),导致路由失败、类加载异常等被静默吞掉,表面看就是“访问不到”。务必在 web/index.php 开头手动打开错误显示,让真实问题浮出来。


















