全部学科
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() 可实现路由内部转发

📝 发现内容有误?点击此处直接编辑

← 上一篇 文件下载
下一篇 → 错误处理与状态码
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库