CodeIgniter 不支持按环境自动加载不同路由文件,但可通过 ENVIRONMENT 常量或 .env 变量在单一路由文件中条件注册路由,并推荐封装为函数提升可维护性,同时需确保 Web 服务器正确转发请求。

CodeIgniter 本身不提供“按环境自动加载不同路由文件”的原生机制,但可以通过条件判断在单一路由文件中实现环境感知的路由配置——关键在于利用框架内置的 ENVIRONMENT 常量或 .env 配置,配合逻辑分支控制路由注册行为。
用 ENVIRONMENT 常量区分开发/生产路由
CI3 和 CI4 都定义了 ENVIRONMENT 常量(通常为 'development'、'testing' 或 'production'),你可以在 routes.php 中直接判断:
- CI3:在
application/config/routes.php中写
if (ENVIRONMENT === 'development') {
$route['debug/info'] = 'debug/info';
$route['api/test-data'] = 'api/test_data';
}
$route['default_controller'] = 'home';
- CI4:在
app/Config/Routes.php的闭包内写
if (ENVIRONMENT === 'development') {
$routes->get('debug/log', 'Debug::log');
$routes->get('admin/maintenance', 'Admin::maintenance');
}
$routes->get('/', 'Home::index');
注意:CI4 中不能在 $routes->group() 外部做条件判断后调用 $routes->get(),必须确保所有路由注册都在 Routes.php 的主作用域或合法闭包内执行。
通过 .env 变量动态控制路由开关
更灵活的方式是读取 .env 中自定义变量(如 APP_DEBUG_ROUTES=true),尤其适合 CI4:
- 先在
.env中添加
APP_DEBUG_ROUTES=true
- 再在
app/Config/Routes.php中使用
if (env('APP_DEBUG_ROUTES') === 'true') {
$routes->get('test/(:any)', 'Test::run/$1');
$routes->post('mock/api', 'Mock::response');
}
这种方式便于部署时通过环境变量一键启用/禁用调试路由,无需修改代码文件。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
避免硬编码,把环境路由抽成独立函数
当路由较多时,可将环境相关路由封装为函数,提升可读性和复用性:
- 在
app/Config/Routes.php底部添加
function registerDevRoutes($routes): void
{
$routes->get('dev/clear-cache', 'Dev::clearCache');
$routes->get('dev/db-status', 'Dev::dbStatus');
}
if (ENVIRONMENT === 'development') {
registerDevRoutes($routes);
}
这样既保持主文件简洁,又方便团队协作时快速识别哪些是临时开发路由。
切记:路由不生效?先确认请求是否进了框架
无论环境怎么配,如果 URL 还带着 index.php 或直接返回 404,大概率是 Web 服务器没把请求转发给 CodeIgniter:
- Apache:检查
.htaccess是否放在public/目录(CI4)或项目根目录(CI3),且AllowOverride All已启用 - Nginx:确认
try_files $uri $uri/ /index.php?$query_string;已正确配置 - 浏览器缓存重定向:用隐身窗口测试,避免旧 302 缓存干扰判断
环境路由只是逻辑分支,前提是请求已成功抵达框架的路由解析层。


















