Browse Source

cache path redirects and improve regexredirects

master
Jan-Lukas Else 4 months ago
parent
commit
dafcace8db
  1. 2
      http.go
  2. 18
      regexRedirects.go

2
http.go

@ -343,7 +343,7 @@ func buildHandler() (http.Handler, error) {
r.Get("/robots.txt", serveRobotsTXT)
// Check redirects, then serve 404
r.With(checkRegexRedirects, cacheMiddleware, minifier.Middleware).NotFound(serve404)
r.With(cacheMiddleware, checkRegexRedirects, minifier.Middleware).NotFound(serve404)
r.With(minifier.Middleware).MethodNotAllowed(func(rw http.ResponseWriter, r *http.Request) {
serveError(rw, r, "", http.StatusMethodNotAllowed)

18
regexRedirects.go

@ -19,27 +19,25 @@ func initRegexRedirects() error {
if err != nil {
return err
}
regexRedirects = append(regexRedirects, &regexRedirect{
r := &regexRedirect{
From: re,
To: cr.To,
Type: cr.Type,
})
}
if r.Type == 0 {
r.Type = http.StatusFound
}
regexRedirects = append(regexRedirects, r)
}
return nil
}
func checkRegexRedirects(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
oldPath := r.URL.Path
for _, re := range regexRedirects {
newPath := re.From.ReplaceAllString(oldPath, re.To)
if oldPath != newPath {
if newPath := re.From.ReplaceAllString(r.URL.Path, re.To); r.URL.Path != newPath {
r.URL.Path = newPath
code := re.Type
if code == 0 {
code = http.StatusFound
}
http.Redirect(w, r, r.URL.String(), code)
http.Redirect(w, r, r.URL.String(), re.Type)
return
}
}

Loading…
Cancel
Save