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

CodeIgniter中如何创建匹配以cms开头的所有路由?

解决CodeIgniter中匹配所有以"cms"开头路由的问题

嘿,我来帮你搞定这个路由匹配的问题!你之前用$route['(^cms)'] = 'welcome';只能匹配字面的"cms",是因为这个正则只检查了URI开头是cms,但没允许后续的任何内容——相当于只有当URI完全等于"cms"时才会触发匹配,带斜杠和子路径的情况直接被排除了。

正确的正则写法

要匹配所有以"cms"开头的路由(包括带多级斜杠的子路径),你可以用这个规则:

$route['^cms(/.*)?'] = 'welcome';

我拆解一下这个正则的逻辑:

  • ^cms:强制要求URI的开头是"cms",避免误匹配类似"xcms"这类路径
  • (/.*)?:这部分是可选的(?表示可出现0次或1次):
    • /:匹配斜杠分隔符
    • .*:匹配任意长度的任意字符(包括更多斜杠和嵌套子路径)
    • 整个(/.*)?既允许"cms"本身,也支持"cms/xxx"、"cms/xxx/yyy/zzz"这类多级目录路径

额外注意事项

  1. 路由顺序优先:记得把这个规则放在其他更具体的路由规则前面,因为CodeIgniter是按从上到下的顺序匹配路由的,先匹配到的规则会优先生效。
  2. 传递子路径参数(可选):如果你需要把"cms"后面的子路径传递给welcome控制器的方法,可以去掉?并使用反向引用:
    $route['^cms(/.*)'] = 'welcome$1';
    
    这样访问cms/about就会调用welcome控制器的about方法,访问cms/blog/post/123就会触发welcome控制器的blog/post/123方法(需要控制器支持这种URI分段的方法调用逻辑)。

测试用例

这个规则会匹配以下所有URI:

  • cms
  • cms/dashboard
  • cms/users/list
  • cms/content/edit/456

而不会匹配abc、xcms/test这类不以"cms"开头的路径。

内容的提问来源于stack exchange,提问作者i.brod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:20