]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
PR53963: don't merge the rewritebase down w/o an opt-in
authorEric Covener <covener@apache.org>
Sat, 17 Nov 2012 02:59:31 +0000 (02:59 +0000)
committerEric Covener <covener@apache.org>
Sat, 17 Nov 2012 02:59:31 +0000 (02:59 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1410681 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/manual/mod/mod_rewrite.xml
modules/mappers/mod_rewrite.c

diff --git a/CHANGES b/CHANGES
index 9581e052dd05389a843b7391b9c6d50507268d10..1dfb0837358caf3ee8d2d074d46765c6423ddbbc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_rewrite: Stop mergeing RewriteBase down to subdirectories
+     unless new option 'RewriteOptions MergeBase' is configured.
+     PR 53963. [Eric Covener]
+
   *) mod_session_dbd: fix a segmentation fault in the function dbd_remove.
     PR 53452. [<rebanerebane gmail com>, Reimo Rebane]
   
index 0479e5e721f1324aed1eb11bf4e8233ae20b4223..cbd37ece3446c1c381f0e37b933f7a1723ea84ee 100644 (file)
@@ -220,6 +220,15 @@ later</compatibility>
       </note>
       </dd>
 
+      <dt><code>MergeBase</code></dt>
+      <dd>
+
+      <p>With this option, the value of <directive module="mod_rewrite"
+      >RewriteBase</directive> is copied from where it's explicitly defined
+      into any sub-directory or sub-location that doesn't define its own
+      <directive module="mod_rewrite">RewriteBase</directive>. Available in 
+      Apache HTTP Server 2.5 and later only.</p>
+      </dd>
       </dl>
 
 </usage>
index be628cdc184faa3268485d2cce2e73c0f043b65a..cd293013d7060c4f3deabdaf7e9dc85869a60206 100644 (file)
@@ -191,6 +191,7 @@ static const char* really_last_key = "rewrite_really_last";
 #define OPTION_INHERIT_BEFORE       1<<2
 #define OPTION_NOSLASH              1<<3
 #define OPTION_ANYURI               1<<4
+#define OPTION_MERGEBASE            1<<5
 
 #ifndef RAND_MAX
 #define RAND_MAX 32767
@@ -2823,8 +2824,11 @@ static void *config_perdir_merge(apr_pool_t *p, void *basev, void *overridesv)
     a->state_set = overrides->state_set || base->state_set;
     a->options = (overrides->options_set == 0) ? base->options : overrides->options;
     a->options_set = overrides->options_set || base->options_set;
-    a->baseurl = (overrides->baseurl_set == 0) ? base->baseurl : overrides->baseurl;
-    a->baseurl_set = overrides->baseurl_set || base->baseurl_set;
+
+    if (a->options & OPTION_MERGEBASE) { 
+        a->baseurl = (overrides->baseurl_set == 0) ? base->baseurl : overrides->baseurl;
+        a->baseurl_set = overrides->baseurl_set || base->baseurl_set;
+    }
 
     a->directory  = overrides->directory;
 
@@ -2899,6 +2903,9 @@ static const char *cmd_rewriteoptions(cmd_parms *cmd,
         else if (!strcasecmp(w, "allowanyuri")) {
             options |= OPTION_ANYURI;
         }
+        else if (!strcasecmp(w, "mergebase")) {
+            options |= OPTION_MERGEBASE;
+        }
         else {
             return apr_pstrcat(cmd->pool, "RewriteOptions: unknown option '",
                                w, "'", NULL);