--- mod_encoding.c.orig 2004-01-30 00:54:18.000000000 +0900 +++ mod_encoding.c 2004-01-30 00:56:33.000000000 +0900 @@ -119,13 +119,22 @@ char *buff; char *keys[] = { "Destination", NULL }; int i; + char *unparsed_uri; + char *query_string; /* Normalize encoding in HTTP request line */ - ap_unescape_url(r->unparsed_uri); - if ((buff = iconv_string(r, cd, r->unparsed_uri, - strlen(r->unparsed_uri))) == NULL) + query_string = apr_pstrdup(r->pool, r->unparsed_uri); + unparsed_uri = ap_getword(r->pool, &query_string, '?'); + ap_unescape_url(unparsed_uri); + if ((buff = iconv_string(r, cd, unparsed_uri, + strlen(unparsed_uri))) == NULL) return -1; - ap_parse_uri(r, buff); + if (query_string && strlen(query_string) > 0) { + ap_parse_uri(r, apr_pstrcat(r->pool, buff, "?", query_string, NULL)); + } else { + ap_parse_uri(r, buff); + } + /* Normalize encoding in HTTP request header(s) */ for (i = 0 ; keys[i] ; i++) {