Fiber中用:name语法注册带参路由,如app.Get("/user/:id", h),匹配时c.Params("id")返回路径值;:id为参数节点,同级不可重名,不自动解码需手动处理;*path通配符必须位于路径末尾且唯一,匹配后c.Params("*")返回原始剩余路径,须经filepath.Clean过滤风险。

怎么注册带参数的路由
用 :name 语法定义路径参数,Fiber 会自动提取并存入 c.Params("name")。比如 app.Get("/user/:id", handler) 匹配 /user/123 时,c.Params("id") 返回 "123"。
注意::id 这类参数节点不阻断前缀共享,但同级不能有两个不同名的参数(如 /user/:id 和 /user/:name 注册后,后者会覆盖前者);也不能和静态路径冲突(/user/new 和 /user/:id 可共存,因为 new 是静态段,优先匹配)。
- 参数名必须是合法标识符,不能含斜杠或点
- 一个路径段只能有一个参数,
/post/:year/:month合法,/post/:year:month非法 - 参数值不会自动 URL 解码,需手动调
url.PathUnescape再使用
通配符 *path 路由怎么写才不报错
*path 必须出现在路径末尾,且整条路由只允许一个。例如 /static/*filepath 合法,/api/*/v1 或 /files/:user/*path 都会在启动时报 invalid pattern。
匹配后,原始路径剩余部分(含斜杠)原样返回 c.Params("*"),不是分割后的切片。比如请求 /download/../../etc/passwd,c.Params("*") 就是字符串 "../../etc/passwd"。
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 用前务必
filepath.Clean过滤路径遍历风险 - 不要依赖命名,
*file或*id都无效,Fiber 只识别字面量* - 和参数节点共存时,优先走参数匹配;只有参数无法吃掉当前段时,才落到
*上
路由分组怎么绑定前缀和中间件
用 app.Group("/admin", authMiddleware) 创建分组,返回的 group 对象支持 Get、Post 等方法,所有子路由自动继承该前缀和中间件。
底层上,Group 注册的是 methodUse 类型路由,所以它对所有 HTTP 方法生效,且只作用于以该前缀开头的路径——不会影响 /api 或根路径。
- 分组中间件在全局
app.Use()之后、单路由中间件之前执行 - 可嵌套:比如
admin := app.Group("/admin", auth),再users := admin.Group("/users", rateLimit) - 别把
Group当作独立 App;它只是路径修饰器,没有自己的中间件栈
为什么有些路由死活不匹配
常见原因是基数树匹配优先级没理清:Fiber 按「静态 → 参数(:name) → 通配(*)」固定顺序尝试,不是按代码注册顺序。
比如同时注册了 /v1/:version/info 和 /v1/*path,请求 /v1/v2/info 一定命中参数节点,*path 根本不会触发;只有像 /v1/anything/else 这种参数节点吃不下的路径,才会走到通配。
- 检查是否误把通配写在非末尾位置,导致启动失败
- 确认有没有更宽泛的静态路由(如
/)提前截获了所有请求 - 用
app.Get("/debug/route", func(c *fiber.Ctx) error { return c.JSON(app.GetRoutes()) })查看实际注册的路由表


















