]> granicus.if.org Git - apache/commitdiff
mod_negotiation: preserve Query String in resolving a type map
authorNick Kew <niq@apache.org>
Tue, 14 Aug 2007 09:22:15 +0000 (09:22 +0000)
committerNick Kew <niq@apache.org>
Tue, 14 Aug 2007 09:22:15 +0000 (09:22 +0000)
PR 33112.  Report with patch by Jørgen Thomsen.
Attention called to it by Per Jessen.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@565671 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/mappers/mod_negotiation.c

diff --git a/CHANGES b/CHANGES
index 46f56a1915f833b3c020fc432a094d5ff31ce180..e17c0db92fb02577d2bd5906b0f0c98c17a2c8ba 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
                                                         -*- coding: utf-8 -*-
 Changes with Apache 2.3.0
 
+  *) mod_negotiation: preserve Query String in resolving a type map
+     PR 33112 [Jørgen Thomsen <apache jth.net>, Nick Kew]
+
   *) mod_deflate: fix content_encoding detection in inflate_out filter
      when it's not in response headers table.
      PR 42993 [Nick Kew]
index 3759278b75f218118ee0e5a61e0920d89db244e5..3a89dc3f9c111800ef9419ce5f717a587bce5d36 100644 (file)
@@ -2971,6 +2971,7 @@ static int handle_map_file(request_rec *r)
     var_rec *best;
     int res;
     char *udir;
+    const char *new_req;
 
     if(strcmp(r->handler,MAP_FILE_MAGIC_TYPE) && strcmp(r->handler,"type-map"))
         return DECLINED;
@@ -3061,8 +3062,21 @@ static int handle_map_file(request_rec *r)
     }
     udir = ap_make_dirstr_parent(r->pool, r->uri);
     udir = ap_escape_uri(r->pool, udir);
-    ap_internal_redirect(apr_pstrcat(r->pool, udir, best->file_name,
-                                     r->path_info, NULL), r);
+    if (r->args) {
+        if (r->path_info) {
+            new_req = apr_pstrcat(r->pool, udir, best->file_name,
+                                  r->path_info, "?", r->args, NULL);
+        }
+        else {
+            new_req = apr_pstrcat(r->pool, udir, best->file_name,
+                                  "?", r->args, NULL);
+        }
+    }
+    else {
+        new_req = apr_pstrcat(r->pool, udir, best->file_name,
+                              r->path_info, NULL);
+    }
+    ap_internal_redirect(new_req, r);
     return OK;
 }