I hope someone from the official dev team can merge this into the next release of apache httpd.
Please find attached an svn diff made against revision 820823 of: http://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x/modules/mappers/mod_rewrite.c This diff fixes the Bug 29744 on the Bugzilla: Bug: https://issues.apache.org/bugzilla/show_bug.cgi?id=47928 Patch: https://issues.apache.org/bugzilla/attachment.cgi?id=24329 This fix allows mod_rewrite to handle CONNECT requests (by not trying to fully qualify the substitution string). The current behavior is that mod_rewrite tries to connect to http[s]://ourhost[:ourport]/host:port. I verified with the RFC (http://www.ietf.org/rfc/rfc2817.txt): A CONNECT method requests that a proxy establish a tunnel connection on its behalf. The Request-URI portion of the Request-Line is always an 'authority' as defined by URI Generic Syntax [2], which is to say the host name and port number destination of the requested connection separated by a colon: CONNECT server.example.com:80 HTTP/1.1 Host: server.example.com:80 This patch will allow a CONNECT request to simply connect to the host:port specified in the substitution string of the rewrite rule. The bug page listed above gives more details. The patch is so small that I'm also pasting it into the body of this email for your quick review. --- mod_rewrite.c (revision 820823) +++ mod_rewrite.c (working copy) @@ -845,7 +845,10 @@ */ static void fully_qualify_uri(request_rec *r) { - if (!is_absolute_uri(r->filename)) { + if (r->method_number == M_CONNECT) { + return; + } + else if (!is_absolute_uri(r->filename)) { const char *thisserver; char *thisport; int port; Hopefully this is enough detail to help. Thank you, BillZ
mod_rewrite.c.unified.diff.patch
Description: Binary data
