package middleware import "net/http" // Rewrite is middleware for rewriting requests internally to // a different path. func Rewrite(p parser) Middleware { // Rewrite describes an internal location rewrite rule. type rewrite struct { From string To string } var rewrites []rewrite for p.Next() { var rule rewrite if !p.NextArg() { return p.ArgErr() } rule.From = p.Val() if !p.NextArg() { return p.ArgErr() } rule.To = p.Val() rewrites = append(rewrites, rule) } return func(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { for _, rule := range rewrites { if r.URL.Path == rule.From { r.URL.Path = rule.To break } } next(w, r) } } }