Iris 默认对带尾部斜杠路径(如 /api/user/)发起301重定向到无斜杠版本,这是因启用路径校正所致;应使用 iris.WithoutPathCorrectionRedirection 关闭重定向但保留归一化匹配。

Iris 默认会对带尾部斜杠的路径(如 /api/user/)发起 301 重定向到无斜杠版本(/api/user),这不是 bug,而是设计行为。如果你不希望发生重定向,必须显式关闭它。
为什么访问 /api/user/ 会跳转?
Iris 路由器默认启用路径校正(path correction),它把末尾斜杠视为“目录意图”,自动重定向到规范路径以统一处理逻辑。这对 REST API 是常见做法,但会导致:
- 客户端收到 301 响应,多一次往返
- 某些前端框架或代理(如 Nginx、CDN)可能缓存该重定向,导致后续请求无法命中真实 handler
- POST 请求重定向后变成 GET,丢失 body 数据
关闭重定向的两种方式选哪个?
关键区别在是否保留路径匹配能力:
-
iris.WithoutPathCorrection:完全禁用路径校正 —— 此时/api/user和/api/user/被视为两个不同路由,你得手动注册两遍才能同时支持 -
iris.WithoutPathCorrectionRedirection:仅禁用重定向,但保持路径归一化 ——/api/user/不跳转,且仍能匹配到/api/user的 handler
绝大多数场景下,你应该用 iris.WithoutPathCorrectionRedirection。它既避免了跳转开销,又不需要重复写路由。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
实际配置示例
在 app.Run() 中传入选项即可:
app := iris.New()
// ... 注册路由,例如 app.Get("/api/user", handler)
app.Run(iris.Addr(":8080"), iris.WithoutPathCorrectionRedirection)
注意:这个选项必须在 Run() 阶段传入,不能在中间件里动态开关。如果用了子路由器(Party),该设置对整个应用生效,无需单独配置每个分组。
容易忽略的兼容性细节
即使关掉了重定向,Iris 仍会把 /api/user/ 当作 /api/user 来匹配路由 —— 这是 WithoutPathCorrectionRedirection 的隐含行为。但如果你同时注册了 /api/user 和 /api/user/ 两条路由(比如误加了 trailing slash),Iris 会报错 duplicate route,因为它内部做了归一化。所以别手动补斜杠写两遍,关掉重定向就够了。


















