--- mod_proxy.c (revision 643170) +++ mod_proxy.c (working copy) @@ -507,8 +507,20 @@ mismatch = 1; use_uri = r->uri; } - found = apr_pstrcat(r->pool, "proxy:", ent[i].real, - use_uri + len, NULL); + + struct iovec args[3]; + args[0].iov_base = "proxy:"; args[0].iov_len = 6; + args[1].iov_base = (char *)ent[i].real; args[1].iov_len = strlen(ent[i].real); + args[2].iov_base = (char *)use_uri + len; args[2].iov_len = strlen(use_uri + len); + + if (use_uri == r->unparsed_uri) { + /* unparsed_uri has queries, so we need to remove it */ + char *qmark = strchr(r->unparsed_uri, '?'); + if (qmark != NULL) { + args[2].iov_len -= strlen(qmark); + } + } + found = apr_pstrcatv(r->pool, (const struct iovec *)&args, 3, NULL); } } if (mismatch) {