]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] http: fix double slash prefix with server redirect
authorWilly Tarreau <w@1wt.eu>
Sat, 9 Jan 2010 23:24:22 +0000 (00:24 +0100)
committerWilly Tarreau <w@1wt.eu>
Thu, 28 Jan 2010 22:16:36 +0000 (23:16 +0100)
When using server redirection, it is possible to specify a path
consisting of only one slash. While this is discouraged (risk of
loop) it may sometimes be useful combined with content switching.
The prefixing of a '/' then causes two slashes to be returned in
the response. So we now do as with the other redirects, don't
prepend a slash if it's alone.
(cherry picked from commit dcb75c4a83246f4907cdd5ffac9cbd7b71732816)

src/proto_http.c

index 421b6c0691514f243d6bfbcde0d63086092156a1..e656a29f90ae37bd12526408c8b0d1e3720db732 100644 (file)
@@ -651,8 +651,11 @@ void perform_http_redirect(struct session *s, struct stream_interface *si)
        if (rdr.len + s->srv->rdr_len > sizeof(trash))
                return;
 
-       memcpy(rdr.str + rdr.len, s->srv->rdr_pfx, s->srv->rdr_len);
-       rdr.len += s->srv->rdr_len;
+       /* special prefix "/" means don't change URL */
+       if (s->srv->rdr_len != 1 || *s->srv->rdr_pfx != '/') {
+               memcpy(rdr.str + rdr.len, s->srv->rdr_pfx, s->srv->rdr_len);
+               rdr.len += s->srv->rdr_len;
+       }
 
        /* 3: add the request URI */
        txn = &s->txn;