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

CI4访问自定义控制器方法遇404路由找不到问题求助

解决CI4路由404及请求跳转异常问题

问题场景

  • 通过Composer将CI4安装到rapti目录,访问http://localhost/rapti/public/正常
  • 在默认Home控制器新增test方法,访问http://localhost/rapti/public/home/test报404错误:Can't find a route for 'get: home/test'
  • 创建新Youtube控制器访问时同样报404
  • 将app/Config/App.php中$uriProtocol改为QUERY_STRING后无报错,但所有请求均跳转到Home控制器的index方法

解决步骤

1. 确认自动路由配置

CI4默认支持自动路由,需确保路由配置未手动关闭:
打开app/Config/Routes.php,检查是否开启自动路由:

$routes->setAutoRoute(true);

如果手动关闭了自动路由(设为false),则需要手动添加对应路由,比如:

$routes->get('home/test', 'Home::test');
$routes->get('youtube', 'Youtube::index');

2. 遵循控制器命名规范

CI4对控制器命名有严格要求:

  • 控制器文件名必须首字母大写,如Home.php、Youtube.php
  • 控制器类名需与文件名完全一致,且首字母大写,示例:
    class Home extends BaseController
    {
        public function test()
        {
            return 'Test Method Content';
        }
    }
    
  • 方法名支持小写或驼峰,URL中统一用小写访问(如home/test对应控制器内的test()方法)

3. 恢复uriProtocol默认值

将app/Config/App.php中的$uriProtocol改回默认的REQUEST_URI:

public string $uriProtocol = 'REQUEST_URI';

改为QUERY_STRING会导致CI4无法正确解析URL路径,进而所有请求匹配默认路由。

4. 检查服务器重写规则

若以上配置正确仍报404,需确认服务器重写规则是否生效:

  • Apache环境:确保public/.htaccess文件存在,内容如下:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    
    同时确认Apache已开启mod_rewrite模块。
  • Nginx环境:在站点配置中添加重写规则:
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
    

5. 清除路由缓存

CI4会缓存路由配置,修改配置后可通过以下方式清除:

  • 删除writable/cache目录下的所有文件
  • 访问任意CI4页面时添加?cache_clear=1参数,如http://localhost/rapti/public/?cache_clear=1

内容的提问来源于stack exchange,提问作者Anurag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:40:04