Echo路由引擎基于基数树,执行完全精确路径匹配,/user/:id与/user/:id/是两个独立路由,末尾斜杠不自动归一化,故/user/123/会404。

Echo 默认严格匹配末尾斜杠,不自动剥离或补全。注册 /user/:id 就只匹配 /user/123;请求 /user/123/(带尾部斜杠)会 404,c.Param("id") 拿不到值。
为什么 /user/123/ 会匹配失败?
Echo 的路由引擎基于基数树(radix tree),执行的是完全精确路径匹配。它不把末尾斜杠当作“可选”,也不做任何归一化处理:
-
/user/:id→ 只接受/user/123、/user/abc这类无尾斜杠的路径 -
/user/:id/→ 是另一个独立路由,需显式注册,匹配/user/123/ - 大小写、路径分隔符数量、正则约束全部参与匹配 —— 多一个
/就是不同节点
如何让 /user/123 和 /user/123/ 都能访问同一 handler?
必须**显式注册两条路由**,不能依赖框架自动兼容:
e.GET("/user/:id", handler)
e.GET("/user/:id/", handler)
注意::id 后加斜杠不是“通配”,而是定义了一个新路径模式。如果还希望限制 :id 只接受数字,得分别加正则:
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
-
/user/:id([0-9]+)→ 匹配/user/123 -
/user/:id([0-9]+)/→ 匹配/user/123/ - 漏掉正则时,
/user/123/extra中的:id会捕获"123/extra",而非仅"123"
Nginx 反向代理时,/api/user → /v1/user 的路径剥离怎么写?
关键不在 rewrite,而在 proxy_pass 末尾斜杠与 location 末尾斜杠的组合行为:
- 错误写法:
location /api/ { proxy_pass http://backend:8080/v1; }→ Nginx 把/api/user改成/v1user(粘连),后端收不到/user - 正确写法:
location /api/ { proxy_pass http://backend:8080/v1/; }→/api/被完整剥离,后端收到/user - 若 Echo 监听根路径(如
/user),则proxy_pass必须写成http://backend:8080/;(带末尾/),不能省略 - 验证方式:在 Echo handler 里打印
r.URL.Path,确认是否为预期路径(如/user而非/api/user)
最易被忽略的是:Echo 自身不处理斜杠归一化,所有路径语义都由你定义;Nginx 的 proxy_pass 斜杠行为又极易写反 —— 这两处一旦错位,404 就悄无声息地发生,且日志里看不出路径被篡改的痕迹。










