Yii 1.1 子文件夹部署路由404问题求助
排查Yii子目录部署404的问题
兄弟,我来帮你捋捋这个问题——这种子目录部署的404我碰到过好几次,大概率是这几个地方没配置对,咱们一步一步来排查:
1. 先确认基础访问路径是否正确
Yii是单入口框架,所有请求都得经过web/index.php这个入口文件。你把Yii装在api文件夹后,先试试直接访问localhost/api/web/index.php?r=mycontroller,如果这个路径能正常返回内容,那说明控制器本身没问题,问题出在重写规则或URL配置上;如果这个路径也404,那得先检查控制器文件的命名和位置是否符合规范(类名得是MyController,文件名为MyController.php放在api/controllers目录下)。
2. 重写规则(.htaccess)没适配子目录
如果用的是Apache服务器,重点检查两个.htaccess文件:
- api根目录下的.htaccess(如果是为了隐藏web目录才加的):原来根目录部署时
RewriteBase /,现在要改成子目录路径:
RewriteEngine on RewriteBase /api/ RewriteRule ^$ web/ [L] RewriteRule (.*) web/$1 [L]
- api/web目录下的.htaccess(默认自带的):确保规则没问题,通常是:
RewriteEngine on # 真实存在的文件/目录直接访问 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 否则转发到index.php RewriteRule . index.php
如果是Nginx服务器,得调整虚拟主机配置里的location规则,指向api的web目录:
location /api { alias /你的服务器路径/api/web; try_files $uri $uri/ /api/index.php?$args; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 根据你的PHP版本调整 fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } }
3. Yii的URL管理器配置错误
打开api/config/web.php,找到urlManager组件,必须把baseUrl设置为子目录路径:
'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'baseUrl' => '/api', // 这里一定要加上/api 'rules' => [ // 你的自定义路由规则 ], ],
如果showScriptName是true,访问路径就得带index.php,比如localhost/api/web/index.php?r=mycontroller,先确认这个能访问再调整美观URL。
4. 服务器权限与配置问题
- 确保Apache的
AllowOverride设置为All,这样.htaccess才能生效,在服务器的httpd.conf或虚拟主机配置里:
<Directory "/你的服务器路径/api"> AllowOverride All </Directory>
- 检查api/web目录的权限,确保服务器能读取里面的文件,避免因权限不足导致的404。
你可以先从第一步的基础路径测试开始,快速定位问题所在,一般来说都是重写规则或URL配置没适配子目录的锅~
内容的提问来源于stack exchange,提问作者user3844579
相关产品推荐
相关产品推荐

