Redirects
Issuing a HTTP redirect is easy. Both internal and external locations are supported. By locations we mean, paths, subdomains, domains and e.t.c.
From Handler
app.Get("/", func(ctx iris.Context) {
ctx.Redirect("https://golang.org/dl", iris.StatusMovedPermanently)
})
Issuing a HTTP redirect from POST.
app.Post("/", func(ctx iris.Context) {
ctx.Redirect("/login", iris.StatusFound)
})
Issuing a local router redirect from a Handler, use Application.ServeHTTPC
or Exec()
like below.
app.Get("/test", func(ctx iris.Context) {
r := ctx.Request()
r.URL.Path = "/test2"
ctx.Application().ServeHTTPC(ctx)
// OR
// ctx.Exec("GET", "/test2")
})
app.Get("/test2", func(ctx iris.Context) {
ctx.JSON(iris.Map{"hello": "world"})
})
Globally
Use the syntax we all love.
import "github.com/kataras/iris/v12/middleware/rewrite"
func main() {
app := iris.New()
// [...routes]
redirects := rewrite.Load("redirects.yml")
app.WrapRouter(redirects)
app.Listen(":80")
}
The "redirects.yml"
file looks like that:
RedirectMatch:
# Redirects /seo/* to /*
- 301 /seo/(.*) /$1
# Redirects /docs/v12* to /docs
- 301 /docs/v12(.*) /docs
# Redirects /old(.*) to /
- 301 /old(.*) /
# Redirects http or https://test.* to http or https://newtest.*
- 301 ^(http|https)://test.(.*) $1://newtest.$2
# Handles /*.json or .xml as *?format=json or xml,
# without redirect. See /users route.
# When Code is 0 then it does not redirect the request,
# instead it changes the request URL
# and leaves a route handle the request.
- 0 /(.*).(json|xml) /$1?format=$2
# Redirects root domain to www.
# Creation of a www subdomain inside the Application is unnecessary,
# all requests are handled by the root Application itself.
PrimarySubdomain: www
The full code can be found at the rewrite middleware example.