首页/ 学科题库/ gin/ 重定向
gin 实战教程

重定向

2026-05-18 约 5 分钟 juanwangdev

重定向

Gin 支持多种重定向方式,满足不同场景需求。

HTTP 重定向

临时重定向(302)

Go
r.GET("/old", func(c *gin.Context) {
    c.Redirect(302, "/new")
})

// 或使用常量
r.GET("/temp", func(c *gin.Context) {
    c.Redirect(http.StatusFound, "/new")
})

永久重定向(301)

Go
r.GET("/old-page", func(c *gin.Context) {
    c.Redirect(301, "https://example.com/new-page")
})

路由内部跳转

使用 c.Request.URL.Path 修改路径后重新执行路由:

Go
r.GET("/test", func(c *gin.Context) {
    c.Request.URL.Path = "/target"
    r.HandleContext(c) // 重新路由
})

r.GET("/target", func(c *gin.Context) {
    c.JSON(200, gin.H{"message": "target reached"})
})

外部 URL 重定向

Go
r.GET("/google", func(c *gin.Context) {
    c.Redirect(302, "https://www.google.com")
})

重定向状态码

状态码含义使用场景
301永久重定向网址永久变更、SEO 保留权重
302临时重定向临时跳转、登录后返回
307临时重定向(保留方法)POST 请求重定向
308永久重定向(保留方法)POST 请求永久迁移

POST 重定向注意事项

302 重定向会将 POST 请求变为 GET,使用 307 保留原方法:

Go
r.POST("/submit", func(c *gin.Context) {
    // 307 保留 POST 方法
    c.Redirect(307, "/process")
})

r.POST("/process", func(c *gin.Context) {
    c.JSON(200, gin.H{"status": "processed"})
})

SEO 优化使用 301,临时跳转使用 302/307。

要点总结

  • c.Redirect(status, url) 实现 HTTP 重定向
  • 301 用于永久迁移,302 用于临时跳转
  • POST 重定向使用 307/308 保留请求方法
  • HandleContext() 可实现路由内部转发
想在手机上练这篇的配套题目?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别下方二维码,即可解锁本讲对应真题与错题本。
了解产品 App
← 上一篇 JSON数据返回 下一篇 → 错误处理与状态码