From: Eric Covener Date: Sat, 17 Nov 2012 02:59:31 +0000 (+0000) Subject: PR53963: don't merge the rewritebase down w/o an opt-in X-Git-Tag: 2.5.0-alpha~6110 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d16310f14413527543b4054c4c994ffe6b1985b;p=thirdparty%2Fapache%2Fhttpd.git PR53963: don't merge the rewritebase down w/o an opt-in git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1410681 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 9581e052dd0..1dfb0837358 100644 --- 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. [, Reimo Rebane] diff --git a/docs/manual/mod/mod_rewrite.xml b/docs/manual/mod/mod_rewrite.xml index 0479e5e721f..cbd37ece344 100644 --- a/docs/manual/mod/mod_rewrite.xml +++ b/docs/manual/mod/mod_rewrite.xml @@ -220,6 +220,15 @@ later +
MergeBase
+
+ +

With this option, the value of RewriteBase is copied from where it's explicitly defined + into any sub-directory or sub-location that doesn't define its own + RewriteBase. Available in + Apache HTTP Server 2.5 and later only.

+
diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index be628cdc184..cd293013d70 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -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);