caseinsensitive: true 才能忽略路由路径大小写,strictrouting: false 仅影响末尾斜杠匹配;参数名、查询键等仍严格区分大小写。

StrictRouting 设置为 false 不能忽略大小写
Fiber 的大小写敏感性由 engine.StrictRouting 控制,但关掉 StrictRouting: false 并不会让路由忽略大小写 —— 它只影响末尾斜杠的匹配行为(比如 /users 和 /users/),和大小写完全无关。
必须显式启用 CaseInsensitive 选项
真正控制大小写的是 CaseInsensitive 配置项,它默认是 false。要在初始化 Fiber 应用时开启:
app := fiber.New(fiber.Config{
CaseInsensitive: true,
})
开启后,app.Get("/User") 就能匹配 GET /user、GET /USER、GET /uSeR 等任意大小写组合。
注意:CaseInsensitive 是全局开关,无法按路由或分组单独设置。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 它只作用于路径匹配阶段,不影响
c.Params()或c.QueryParam()的取值逻辑 - 路径参数名(如
:id)本身不参与大小写判断,但匹配到的原始值仍保持原样(比如请求/USER/ABC,c.Params("id")得到"ABC",不是"abc") - 如果你同时开了
CaseInsensitive: true和StrictRouting: false,二者互不干扰,但后者依然只管斜杠,别指望它“顺带”处理大小写
常见误操作:试图用中间件模拟忽略大小写
有人想在中间件里把 c.Path() 统一转小写再重写路由,这是错的:
-
c.Path()是只读的,无法修改;c.Set("X-Path", ...)之类无效 - 路由匹配发生在中间件执行之前,改了也没用
- 强行用
c.Redirect()做 301 跳转,会暴露大小写转换逻辑,且破坏客户端原始 URL 语义
唯一正确路径就是初始化时设 CaseInsensitive: true —— 没有运行时开关,也没有 per-route 替代方案。
大小写敏感的边界情况容易被忽略
即使开了 CaseInsensitive: true,以下地方仍严格区分大小写:
-
c.Params("ID")≠c.Params("id"):参数键名本身区分大小写 -
c.QueryParam("Sort")≠c.QueryParam("sort"):查询参数名也区分 - 静态文件服务(
app.Static())中文件路径仍受操作系统限制,Linux 下/public/IMG.jpg和/public/img.jpg是两个文件
也就是说,路由路径匹配可以忽略大小写,但所有从请求中提取的数据字段(参数名、查询键、Header 名等)仍是 Go 原生字符串比较逻辑 —— 这点必须手动对齐,框架不接管。










