You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gin是否支持HTTP请求重写并转发到指定API组实现域名路由?

Gin完全支持HTTP请求重写并转发到指定路由组的能力,不需要引入额外第三方组件,通过自定义中间件即可实现低侵入式改造,完全复用原有业务逻辑和中间件。

实现思路

核心逻辑是在路由匹配前拦截指定域名的请求,重写请求路径后继续走原有路由匹配流程,原有逻辑无需任何修改即可适配新域名规则。

示例代码

  1. 实现路径重写中间件
func rewriteDomainRoute() gin.HandlerFunc {
    return func(c *gin.Context) {
        switch c.Request.Host {
        case "login.example.com":
            // 将login.example.com下的所有请求路径,拼接上原有/login路由组前缀
            c.Request.URL.Path = "/login" + c.Request.URL.Path
        // 后续可扩展其他域名的重写规则
        // case "user.example.com":
        //     c.Request.URL.Path = "/user" + c.Request.URL.Path
        default:
            // 非目标域名直接跳过重写逻辑
        }
        c.Next()
    }
}
  1. 注册中间件到Gin实例顶层,保证在路由匹配前执行
func main() {
    r := gin.Default()
    // 优先注册重写中间件
    r.Use(rewriteDomainRoute())

    // 原有路由定义完全不需要改动,直接复用即可
    loginGroup := r.Group("/login")
    // 原有登录校验中间件、业务逻辑全部复用
    loginGroup.Use(authMiddleware(), rateLimitMiddleware()...)
    {
        loginGroup.GET("/", loginPageHandler)
        loginGroup.POST("/", loginSubmitHandler)
        loginGroup.POST("/sms", smsCodeHandler)
    }

    r.Run(":80")
}

注意事项

  • Gin默认开启RedirectTrailingSlash配置,重写路径后的末尾斜杠匹配问题会自动处理,无需额外适配
  • 若需要更高的隔离性,也可以直接用Gin原生的Host路由分组实现,给不同域名单独声明路由组后挂载对应handler,两种方案都可以满足需求,路径重写方案的改造成本更低
  • 重写操作在路由匹配前完成,后续所有中间件、handler拿到的都是重写后的请求路径,完全兼容原有逻辑中依赖请求路径的校验、埋点等功能

内容的提问来源于stack exchange,提问作者AndyChow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:24:04