httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@engelschall.com (Ralf S. Engelschall)
Subject [PATCH] mod_rewrite redirects w/ QS in per-dir context
Date Tue, 28 Oct 1997 12:23:39 GMT

This patch fixes a problem in mod_rewrite (both Apache 1.2 and 1.3)
which Mark J Cox has reported to me these days:

     RewriteRule ^foo            /bar?query  [R]
     RewriteRule ^foo http://host/bar?query  [R]

In per-server context (httpd.conf) both worked fine, but in
per-directory context (.htaccess) only the first one worked
correct. The second one leaded to a

     Location: http://host/bar%3fquery

as the result (i.e. the `?' is escaped which is incorrect).  Below are two
patches (one for 1.3 and one for 1.2) which successfully (I've tested both
1.2.4 and 1.3b3 with this) fixed the problem. The fact is just that the second
explicit redirect case (subst part prefixed with http://) is handled different
in mod_rewrite and there the splitting out of the query args was missing.

Patch for Apache 1.3b3-dev:

Index: mod_rewrite.c
===================================================================
RCS file: /e/apache/REPOS/apachen/src/modules/standard/mod_rewrite.c,v
retrieving revision 1.54
diff -u -r1.54 mod_rewrite.c
--- mod_rewrite.c   1997/10/22 20:30:27 1.54
+++ mod_rewrite.c   1997/10/28 11:51:45
@@ -1706,7 +1706,11 @@
             }
             rewritelog(r, 2, "[per-dir %s] redirect %s -> %s", perdir,
                        r->filename, newuri);
+            /* set current URL... */
             r->filename = pstrdup(r->pool, newuri);
+            /* ...but split out the QUERY_STRING part */
+            splitout_queryargs(r, p->flags & RULEFLAG_QSAPPEND);
+            /* now stop processing with a forced redirect */
             r->status = p->forced_responsecode;
             return 1;
         }

Patch for Apache 1.2.5-dev:

Index: mod_rewrite.c
===================================================================
RCS file: /e/apache/REPOS/apache/src/mod_rewrite.c,v
retrieving revision 1.28.2.3
diff -u -r1.28.2.3 mod_rewrite.c
--- mod_rewrite.c   1997/08/17 20:35:49 1.28.2.3
+++ mod_rewrite.c   1997/10/28 11:53:52
@@ -1590,6 +1590,7 @@
             }
             rewritelog(r, 2, "[per-dir %s] redirect %s -> %s", perdir, r->filename,
newuri);
             r->filename = pstrdup(r->pool, newuri);
+            splitout_queryargs(r, p->flags & RULEFLAG_QSAPPEND);
             r->status = p->forced_responsecode;
             return 1;
         }

Greetings,
                                       Ralf S. Engelschall
                                       rse@engelschall.com
                                       www.engelschall.com

Mime
View raw message