全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 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() 可实现路由内部转发
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 JSON数据返回
下一篇 → 错误处理与状态码
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码