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

CodeIgniter 3自定义路由以去除URL中controller字样的实现咨询

CodeIgniter 3自定义路由以去除URL中controller字样的实现咨询

嘿,我来帮你把这个问题理得明明白白!你现在的思路其实是对的,CodeIgniter 3的路由系统就是用来帮你把友好的URL映射到实际的控制器/方法上,从而隐藏掉控制器名称里的Controller后缀。

先给你拆解一下你已经写的路由:

  • 你写的$route['alt-text'] = 'AltTextController/index';:这已经实现了让用户访问你的域名/alt-text时,实际调用AltTextController的index方法,URL里完全看不到Controller字样,完美符合你的需求。而且因为index是CI控制器的默认方法,你还可以简化成$route['alt-text'] = 'AltTextController';,效果是一样的。
  • 上传PDF的路由$route['alt-text/upload'] = 'AltTextController/uploadPdf';:同样正确,用户访问你的域名/alt-text/upload时,会触发AltTextController的uploadPdf方法,URL里没有多余的后缀。
  • 删除PDF的路由逻辑和上面一致,也是没问题的。

再看你那条User相关的路由$route['User/alt-text'] = 'UserController/AltText';:这条路由的作用是,当用户访问你的域名/User/alt-text时,会调用UserController的AltText方法,同样也隐藏了Controller后缀。这里提个小建议,URL一般推荐用小写(比如user/alt-text),CI的路由默认不区分大小写,所以不影响功能,但小写URL更符合规范。

如果你有很多控制器都需要去掉Controller后缀,不想一个个手动写路由,还可以用正则路由批量处理,比如在routes.php的末尾加上这两行:

// 匹配单个控制器路径,比如 /alt-text 映射到 AltTextController
$route['([a-zA-Z0-9_-]+)'] = '$1Controller';
// 匹配带方法的路径,比如 /alt-text/upload 映射到 AltTextController/upload
$route['([a-zA-Z0-9_-]+)/(:any)'] = '$1Controller/$2';

注意哦,这两行一定要放在所有自定义路由的后面!因为CI的路由是从上到下匹配的,先匹配到的规则会生效,把批量路由放后面就不会覆盖你之前写的特定路由了。

总结一下:你现在的路由写法已经完全实现了去除URL中Controller字样的需求,要是想更高效处理多个控制器,就用正则批量路由就行啦!

备注:内容来源于stack exchange,提问作者Abhinav Dubey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:09:35