You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:58:02