Bug 46428

Summary: Spaces in URI doesn't encode in proxy-requests
Product: Apache httpd-2 Reporter: Alexey Vlasov <renton>
Component: mod_rewriteAssignee: Apache HTTPD Bugs Mailing List <bugs>
Status: REOPENED ---    
Severity: normal    
Priority: P2    
Version: 2.2.9   
Target Milestone: ---   
Hardware: PC   
OS: Linux   

Description Alexey Vlasov 2008-12-21 10:32:47 UTC
Proxy request:

On server1 -
# cat .htaccess
RewriteEngine On
RewriteRule (AAA.*) http://server2.com/phpinfo.php?q=$1 [L,P]

# telnet server1.com 80
GET /AAA%20AAA HTTP/1.1
HOST:server1.com

answer from server2:
QUERY_STRING    q=AAA
REQUEST_URI     /phpinfo.php?q=AAA
SCRIPT_NAME     /phpinfo.php

Usual requst:
# cat .htaccess
RewriteEngine On
RewriteRule (AAA.*) /phpinfo.php?q=$1 [L]

Similar request but the answer is:
QUERY_STRING    q=AAA AAA
REQUEST_URI     /AAA%20AAA
SCRIPT_NAME     /phpinfo.php
Comment 1 Joe Orton 2009-03-23 09:03:53 UTC
Fixed in r757427 - thanks for the report.
Comment 2 Ruediger Pluem 2009-05-10 08:13:57 UTC
Backported to 2.2.x as r773351.
Comment 3 Alexey Vlasov 2012-09-18 18:31:20 UTC
By the way this patch didn't solve that problem I described first. You should add the following:

--- modules/mappers/mod_rewrite.c.orig  2012-09-18 22:30:31.170185072 +0400
+++ modules/mappers/mod_rewrite.c       2012-09-17 23:48:43.428422154 +0400
@@ -769,6 +769,7 @@
         else if (r->args[len-1] == '&') {
             r->args[len-1] = '\0';
         }
+        r->args = ap_escape_uri(r->pool, r->args);
         rewritelog((r, 3, NULL, "split uri=%s -> uri=%s, args=%s", olduri,
                     r->filename, r->args ? r->args : "<none>"));
     }