必须开启ci4的路由调试模式:执行spark routes查看注册路由,设$threshold = logger::debug并确保writable/logs/可写,才能打印匹配日志;ci3需手动修改router.php注入日志,且上线前必须还原。

想快速定位CodeIgniter路由不生效、404或跳转错乱的问题,必须打开框架内置的路由调试模式,让系统把每一步匹配过程和最终决定调用哪个控制器方法的过程都打印出来。
确认当前使用的是CI4还是CI3
CI4和CI3的调试开关位置、方式完全不同,混用会导致配置无效。打开项目根目录下的composer.json文件,查看"codeigniter4/framework"或"codeigniter/framework"字段——前者是CI4,后者是CI3。
这一步不能跳过,因为CI3没有原生路由调试日志,而CI4的spark routes命令只在CI4下可用。
CI4:用命令行实时查看所有注册路由
在项目根目录终端中执行:
spark routes
这条命令会列出当前已加载的所有路由规则,包括HTTP方法、URI模式、目标控制器方法、命名空间、中间件等完整信息。它不依赖Web请求,直接读取app/Config/Routes.php并解析,是最权威的“路由快照”。
如果输出为空或报错Command not found,说明你不在CI4项目根目录,或spark文件权限不足(Linux/macOS需chmod +x spark)。
CI4:开启详细路由匹配日志
编辑app/Config/Logger.php,将$threshold设为DEBUG:
$threshold = \CodeIgniter\Log\Logger::DEBUG;
再打开app/Config/Routes.php,在所有路由定义之前添加一行:
$routes->setAutoRoute(false);
然后访问任意URL(比如/home/about),打开writable/logs/目录下最新生成的log文件,搜索关键词Routing或matched,你会看到类似这样的记录:
[INFO] Routing: Attempting to match route for GET /home/about → matched Home::about()
[DEBUG] Routing: No route matched for POST /login → 404
⚠️ 注意:【必须确保writable/logs/目录可写,否则日志不会生成】
CI3:手动注入路由匹配追踪
CI3无官方调试开关,需在system/core/Router.php中临时修改(仅限开发环境):
找到function _validate_request()方法,在return $this->set_class($class);前插入:
log_message('debug', 'CI3 Router matched: '.$class.'::'.$method);
再访问页面,去application/logs/里查最新log文件即可看到每次路由匹配结果。
这一步改的是核心文件,【上线前务必还原,否则可能引发安全风险】
验证重写是否生效(通用前置检查)
无论CI3还是CI4,若URL中还带着index.php(如http://localhost/index.php/home),说明Apache/Nginx重写失败,所有路由调试都白搭。
先访问http://localhost/your-project/public/(CI4)或http://localhost/your-project/index.php/welcome(CI3),确认欢迎页能打开;
再尝试去掉index.php访问同地址,如果404,立刻检查.htaccess是否存在且被Web服务器读取——CI4的.htaccess在public/目录下,CI3的在项目根目录。










