Echo中匹配任意路径需用末尾星号通配符(如/admin/),通过c.Param("")获取子路径,且必须定义在静态和参数路由之后以避免冲突,不支持嵌套通配。

要在Echo框架中匹配任意路径(比如/admin/*、/api/v1/*这类需要捕获后续全部子路径的场景),必须使用通配符模式 Match any,它用星号 * 表示零个或多个字符,且该通配符必须位于路径末尾。
注册通配符路由
在 Echo 实例上调用对应 HTTP 方法时,将路径末尾设为 /* 即可启用通配符匹配。
e.GET("/admin/*", adminHandler)
e.POST("/api/v1/*", apiV1Handler)
注意:通配符 * 必须紧贴斜杠后,不能写成 /admin/*sub 或 /admin/**,否则不被识别为 Match any 模式,会报错或完全不匹配。
获取通配符匹配到的子路径
通配符匹配的部分不会自动作为命名参数注入,而是通过 c.Param("*") 显式提取。
Echo框架 5.1.0 版本源码包下载,适合关注 RealIP 行为变化、StartConfig.Listener、NewDefaultFS 和观测性中间件入口的开发团队。
func adminHandler(c echo.Context) error {
subpath := c.Param("*")
return c.String(http.StatusOK, "admin subpath: "+subpath)
}
例如请求 GET /admin/users/123/edit,c.Param("*") 返回 users/123/edit(不含开头斜杠);请求 /admin/ 时返回空字符串。
通配符路由的优先级与冲突规避
第一步:确认通配符路由定义在所有静态和参数路由之后——因为 Echo 匹配顺序是 Static → Param → Match any,哪怕你先写 e.GET("/admin/*", ...),它也永远排在 e.GET("/admin/login", ...) 后面执行。
第二步:避免路径前缀重叠。比如同时存在 /admin/* 和 /admin/users/*,后者会被前者吞掉——/admin/users/1 会命中 /admin/* 并返回 users/1,而不会进入 /admin/users/*。
第三步:如需多级通配控制,应改用分组 + 中间件,而非叠加通配符路由。例如:g := e.Group("/admin")<br>g.Use(adminMiddleware)<br>g.GET("/login", loginHandler)<br>g.GET("/users/*", usersWildcardHandler)
【通配符路由不支持嵌套通配,/a/*/b 是非法路径】


















