Echo 中重定向唯一正确方式是 ctx.Redirect(),它自动处理状态码、Header 和协议/Host 拼接;URL 清洗必须前置,用预编译正则校验路径与查询参数,避免开放重定向和路径遍历。

echo.Redirect() 是路由重定向的唯一正确入口
别在 Echo 里手动写 ctx.Response().Header().Set("Location", ...) 或调用标准库 http.Redirect()。Echo 的 ctx.Redirect() 不仅封装了状态码、头设置和空响应体,还自动处理了协议/Host 拼接——只要传入的是相对路径(如 "/dashboard")或完整 URL(如 "https://app.com/success"),它就会基于当前请求的 req.URL 正确解析跳转地址。
常见错误是混用重定向和内容输出:ctx.Redirect() 调用后立刻终止响应流程,若再跟 ctx.String() 或 ctx.JSON(),会 panic;中间件里调用它也必须 return,否则后续 handler 仍会执行。
- 状态码优先选
http.StatusSeeOther(303),尤其用于 POST 表单成功后跳转,能防止刷新重复提交 - 避免用
http.StatusFound(302)做默认值,它语义模糊且部分客户端可能保留 POST 方法 - 绝对 URL 更安全,但相对路径在大多数部署下也可靠;反向代理场景需确认
X-Forwarded-Proto已被中间件正确处理
URL 清洗不能靠路由参数捕获,得用正则预处理
Echo 的路由匹配(如 /users/:id)只负责分发,不校验或清洗路径内容。比如 /profile/..%2Fetc%2Fpasswd 这类路径,即使没定义对应路由,也可能被泛匹配规则(如 /profile/*)捕获,进而触发危险操作。
真正有效的 URL 清洗发生在中间件层,用正则提前过滤非法字符或可疑模式:
Skill Weave Chains — 技能链路由引擎
下载
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 拒绝含
%2E%2E(即../编码)、%00、控制字符(