From 8bf4697dc22465bd2f4e81cf724df4a96207c682 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 30 Nov 2020 10:19:48 +0000 Subject: [PATCH] serve http/webdav: redirect requests to the base url without the / When using `--baseurl` before this patch, if a request was made to the base URL without a trailing / then rclone would return a 404 error. Unfortunately GVFS / Nautilus makes the request without the / regardless of what the user put in. This patch redirects the request to the base URL with a /. So if the user was using `--baseurl rclone` then a request to http://localhost/rclone would be redirected with a 308 response to http://localhost/rclone/ Fixes #4814 --- cmd/serve/httplib/httplib.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd/serve/httplib/httplib.go b/cmd/serve/httplib/httplib.go index d28fe253f..a5d6b2618 100644 --- a/cmd/serve/httplib/httplib.go +++ b/cmd/serve/httplib/httplib.go @@ -402,6 +402,11 @@ func (s *Server) Path(w http.ResponseWriter, r *http.Request) (Path string, ok b return Path, true } if !strings.HasPrefix(Path, s.Opt.BaseURL+"/") { + // Send a redirect if the BaseURL was requested without a / + if Path == s.Opt.BaseURL { + http.Redirect(w, r, s.Opt.BaseURL+"/", http.StatusPermanentRedirect) + return Path, false + } http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound) return Path, false }