重定向
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()可实现路由内部转发
📝 发现内容有误?点击此处直接编辑