Commit 4baca884 authored by Tw's avatar Tw

proxy: preserve path trailing slash if it was there

fix issue #1177
Signed-off-by: default avatarTw <tw19881113@gmail.com>
parent 9ced4b17
...@@ -791,6 +791,11 @@ func TestProxyDirectorURL(t *testing.T) { ...@@ -791,6 +791,11 @@ func TestProxyDirectorURL(t *testing.T) {
expectURL: `https://localhost:2021/t?foo%3dbar&t%3dw`, expectURL: `https://localhost:2021/t?foo%3dbar&t%3dw`,
without: "/test", without: "/test",
}, },
{
requestURL: `http://localhost:2020/test/`,
targetURL: `https://localhost:2021/t/`,
expectURL: `https://localhost:2021/t/test/`,
},
} { } {
targetURL, err := url.Parse(c.targetURL) targetURL, err := url.Parse(c.targetURL)
if err != nil { if err != nil {
......
...@@ -96,7 +96,13 @@ func NewSingleHostReverseProxy(target *url.URL, without string, keepalive int) * ...@@ -96,7 +96,13 @@ func NewSingleHostReverseProxy(target *url.URL, without string, keepalive int) *
} }
} }
hadTrailingSlash := strings.HasSuffix(req.URL.Path, "/")
req.URL.Path = path.Join(target.Path, req.URL.Path) req.URL.Path = path.Join(target.Path, req.URL.Path)
// path.Join will strip off the last /, so put it back if it was there.
if hadTrailingSlash && !strings.HasSuffix(req.URL.Path, "/") {
req.URL.Path = req.URL.Path + "/"
}
// Trims the path of the socket from the URL path. // Trims the path of the socket from the URL path.
// This is done because req.URL passed to your proxied service // This is done because req.URL passed to your proxied service
// will have the full path of the socket file prefixed to it. // will have the full path of the socket file prefixed to it.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment