diff --git a/http/http.go b/http/http.go index 7557d479..a80a79f9 100644 --- a/http/http.go +++ b/http/http.go @@ -60,5 +60,5 @@ func NewHandler(storage *storage.Storage, server *settings.Server) (http.Handler public.PathPrefix("/dl").Handler(monkey(publicDlHandler, "/api/public/dl/")).Methods("GET") public.PathPrefix("/share").Handler(monkey(publicShareHandler, "/api/public/share/")).Methods("GET") - return http.StripPrefix(server.BaseURL, r), nil + return stripPrefix(server.BaseURL, r), nil } diff --git a/http/utils.go b/http/utils.go index 1d872a53..3964da42 100644 --- a/http/utils.go +++ b/http/utils.go @@ -3,7 +3,9 @@ package http import ( "encoding/json" "net/http" + "net/url" "os" + "strings" "github.com/filebrowser/filebrowser/v2/errors" ) @@ -37,3 +39,21 @@ func errToStatus(err error) int { return http.StatusInternalServerError } } + +// This is an addaptation if http.StripPrefix in which we don't +// return 404 if the page doesn't have the needed prefix. +func stripPrefix(prefix string, h http.Handler) http.Handler { + if prefix == "" { + return h + } + + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + p := strings.TrimPrefix(r.URL.Path, prefix) + r2 := new(http.Request) + *r2 = *r + r2.URL = new(url.URL) + *r2.URL = *r.URL + r2.URL.Path = p + h.ServeHTTP(w, r2) + }) +}