diff --git a/router.go b/router.go index f53b4ca..d869fc6 100644 --- a/router.go +++ b/router.go @@ -38,6 +38,7 @@ type Router struct { NotFoundHandler Handle MethodNotAllowedHandler Handle ErrorHandler ErrorHandle + TrimTrailingSlashes bool server *http.Server } @@ -127,7 +128,7 @@ func (r *Router) Stop() error { return err } -func (r *Router) getHttpr() *httprouter.Router { +func (r *Router) getHttpr() http.Handler { httpr := httprouter.New() for _, v := range r.routes { @@ -156,6 +157,18 @@ func (r *Router) getHttpr() *httprouter.Router { r.ErrorHandler(c, err) } + if r.TrimTrailingSlashes { + httpr.RedirectTrailingSlash = false + + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + l := len(req.URL.Path) + if l > 1 && req.URL.Path[l-1] == '/' { + req.URL.Path = req.URL.Path[:l-1] + } + httpr.ServeHTTP(w, req) + }) + } + return httpr }