in internal/serving/disk/reader.go [44:79]
func (reader *Reader) tryRedirects(h serving.Handler) bool {
defer slowlogs.Recorder(h.Request.Context(), "reader.tryRedirects")()
ctx := h.Request.Context()
root, served := reader.root(h)
if root == nil {
return served
}
r := redirects.ParseRedirects(ctx, root)
requestURL := cloneURL(h.Request.URL)
// Taking value from h.Request.Host as h.Request.URL.Host is not populated
requestURL.Host = h.Request.Host
rewrittenURL, status, err := r.Rewrite(requestURL)
if err != nil {
if !errors.Is(err, redirects.ErrNoRedirect) {
// We assume that rewrite failure is not fatal
// and we only capture the error
errortracking.CaptureErrWithReqAndStackTrace(err, h.Request)
}
return false
}
if status == http.StatusOK {
h.SubPath = strings.TrimPrefix(rewrittenURL.Path, h.LookupPath.Prefix)
return reader.tryFile(h)
}
copySchemeAndHost(requestURL, rewrittenURL)
http.Redirect(h.Writer, h.Request, rewrittenURL.String(), status)
return true
}