codeigniter 无 addredirect() 方法;ci3 需用路由+控制器 redirect() helper 实现,ci4 自4.3.0起支持 $routes->redirect('/old', '/new', 301)。

CodeIgniter 本身没有内置的 addRedirect() 方法或路由函数。无论是 CI3 还是 CI4,框架都不提供名为 addRedirect 的路由配置接口——这个名称不属于官方 API,常见于混淆或误传(比如和 Laravel 的 Route::redirect() 混淆)。
CI3 中实现重定向路由的正确方式
CodeIgniter 3 不支持“声明式重定向路由”,但可通过以下组合达成等效效果:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
用普通路由 + 控制器内 redirect():定义一个路由指向专用重定向控制器方法
$route['old-page'] = 'redirector/go_to_new'; -
在控制器中调用 helper 实现跳转:
$this->load->helper('url');
redirect('/new-page', 'location'); - 不推荐直接在 routes.php 中写 header() 或 exit():破坏框架生命周期,可能绕过钩子、日志、过滤器等关键机制。
CI4 中更接近“重定向路由”的做法
CI4 同样没有 addRedirect(),但提供了语义清晰的 $routes->redirect() 方法(自 4.3.0 起正式支持):
-
语法简洁,服务端跳转:
$routes->redirect('/old-path', '/new-path', 301);
第三个参数可选301(永久)或302(临时),默认为302。 -
支持通配符匹配(需正则):
$routes->add('/blog/(\d+)', function($id) { return redirect("/articles/$id"); }); - 注意:必须放在 app/Config/Routes.php 的闭包内,且不能与 $routes->get() 等冲突;执行后立即返回响应,不进入控制器。
替代方案:避免硬编码重定向的实用建议
真正健壮的重定向管理,应结合业务场景分层处理:
-
静态路径迁移:用
$routes->redirect()(CI4)或路由+redirect() helper(CI3)即可,适合 SEO 友好型 URL 更新。 -
动态路径映射(如旧 ID → 新 Slug):路由指向中间控制器,在其中查数据库、生成新 URL,再执行
redirect(),确保逻辑可审计、可缓存。 - 全局路径规范(如强制带 www / HTTPS / 语言前缀):应在 Web 服务器层(Nginx/Apache)配置,而非框架路由,性能更高、更可靠。










