iris框架url重定向分两种:子域名跳转用subdomainredirect(需配hosts文件并先注册www子域),路径跳转用ctx.redirect(支持301/302,注意协议一致性与stopexecution)。

Iris 框架处理 URL 重定向主要有两种明确场景:子域名跳转(如 mydomain.com → www.mydomain.com)和路径级重定向(如 /old → /new)。前者用 SubdomainRedirect,后者用 ctx.Redirect 或 app.Get + ctx.Redirect 组合,不能混用。
子域名重定向必须配 hosts + SubdomainRedirect
本地测试 mydomain.com 跳转到 www.mydomain.com 时,SubdomainRedirect 不会自动改写 DNS 或绕过系统解析。它只在请求已到达 Iris 实例后生效,所以你必须先让系统把这两个域名都指向 127.0.0.1:
- Windows 编辑
C:\Windows\System32\drivers\etc\hosts,追加两行:127.0.0.1 mydomain.com<br>127.0.0.1 www.mydomain.com
- Linux/macOS 编辑
/etc/hosts,同样添加这两行 - 代码里必须先注册
www子域名路由(app.Subdomain("www")),再调用app.SubdomainRedirect(app, www),顺序反了会 panic - 注意:这个方法只对 HTTP 请求生效;HTTPS 需额外配置 TLS 证书,否则浏览器会拦截重定向
ctx.Redirect 是最常用的路径跳转方式
它对应 HTTP 302(临时)或 301(永久)状态码,适用于页面迁移、登录跳转等场景:
-
ctx.Redirect("/login", iris.StatusMovedPermanently)发送 301,适合 SEO 固定路径变更 -
ctx.Redirect("/dashboard", iris.StatusFound)(即 302)更安全,避免浏览器缓存错误跳转 - 目标路径支持完整 URL,比如
ctx.Redirect("https://example.com/home", iris.StatusFound),但跨域重定向可能被浏览器限制(CORS 不影响跳转本身,但会影响后续 JS 行为) - 别在中间件里无条件调用
ctx.Redirect后忘记ctx.StopExecution(),否则后续 handler 仍会执行,可能造成 panic 或重复响应
不要用 app.Party 做重定向逻辑
app.Party("/old") 是路由分组,不是重定向指令。有人误以为给 Party 加个中间件就能跳转,结果发现:
- 如果只写
oldGroup := app.Party("/old"); oldGroup.Use(func(ctx iris.Context) { ctx.Redirect("/new") }),实际访问/old/anything会 404,因为没注册任何 handler - 正确做法是显式注册路由:
app.Get("/old", func(ctx iris.Context) { ctx.Redirect("/new") }) - 批量路径重定向建议用正则匹配或中间件 +
ctx.Path()判断,而不是靠 Party 前缀“覆盖”行为
真正容易被忽略的是重定向的协议一致性:如果服务跑在 HTTPS 上,但 ctx.Redirect("/home") 写成相对路径,浏览器会沿用当前协议;可一旦你用反向代理(如 Nginx)且没透传 X-Forwarded-Proto,Iris 可能误判为 HTTP,导致跳转回错协议。检查 ctx.Request().TLS 或代理配置比硬编码 URL 更可靠。











