]> granicus.if.org Git - apache/commitdiff
Merge r1570288 from trunk:
authorJim Jagielski <jim@apache.org>
Fri, 21 Feb 2014 19:47:26 +0000 (19:47 +0000)
committerJim Jagielski <jim@apache.org>
Fri, 21 Feb 2014 19:47:26 +0000 (19:47 +0000)
  *) mod_rewrite: Add RewriteOptions InheritDown, InheritDownBefore,
     and IgnoreInherit to allow RewriteRules to be pushed from parent scopes
     to child scopes without explicitly configuring each child scope.
     PR56153.

Submitted By: Edward Lu
Committed By: covener

Submitted by: covener
Reviewed/backported by: jim

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1570684 13f79535-47bb-0310-9956-ffa450edef68

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

diff --git a/CHANGES b/CHANGES
index 02438fac029935958fc0db02a74395fa5e7cc48f..1065b612fc95adfbf7bd88c24ea13d184c9f445f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,11 @@
 
 Changes with Apache 2.4.8
 
+  *) mod_rewrite: Add RewriteOptions InheritDown, InheritDownBefore, 
+     and IgnoreInherit to allow RewriteRules to be pushed from parent scopes
+     to child scopes without explicitly configuring each child scope.
+     PR56153.  [Edward Lu <Chaosed0 gmail com>] 
+
   *) prefork: Fix long delays when doing a graceful restart.
      PR 54852 [Jim Jagielski, Arkadiusz Miskiewicz <arekm maven pl>]
 
diff --git a/STATUS b/STATUS
index 4cd7c62bb84c72299e4e569d81dfcf93fb5becd8..ff7a682b5c68d75f60dfc4bfd58c30a5813b65b8 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -98,13 +98,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-   *  mod_rewrite: Add RewriteOptions InheritDown, InheritDownBefore,
-     and IgnoreInherit to allow RewriteRules to be pushed from parent scopes
-     to child scopes without explicitly configuring each child scope.
-     PR56153. 
-     trunk patch: http://svn.apache.org/r1570288
-     2.4.x patch: trunk works
-     +1 covener, humbedooh, jim
 
 
 PATCHES PROPOSED TO BACKPORT FROM TRUNK:
index 1816da86fdf409b865ce6c5d399369cf47660d09..50417a7313730f6a421609a17e0515ef9be5b686 100644 (file)
@@ -173,6 +173,34 @@ later</compatibility>
       Available in Apache HTTP Server 2.3.10 and later.</p>
       </dd>
 
+      <dt><code>InheritDown</code></dt>
+      <dd>
+
+      <p>If this option is enabled, all child configurations will inherit
+      the configuration of the current configuration. It is equivalent to
+      specifying <code>RewriteOptions Inherit</code> in all child
+      configurations. See the <code>Inherit</code> option for more details
+      on how the parent-child relationships are handled. Available in Apache
+      HTTP Server 2.4.8 and later.</p>
+      </dd>
+
+      <dt><code>InheritDownBefore</code></dt>
+      <dd>
+
+      <p>Like <code>InheritDown</code> above, but the rules from the current
+      scope are applied <strong>before</strong> rules specified in any child's
+      scope. Available in Apache HTTP Server 2.4.8 and later.</p>
+      </dd>
+
+      <dt><code>IgnoreInherit</code></dt>
+      <dd>
+
+      <p>This option forces the current and child configurations to ignore
+      all rules that would be inherited from a parent specifying
+      <code>InheritDown</code> or <code>InheritDownBefore</code>. Available
+      in Apache HTTP Server 2.4.8 and later.</p>
+      </dd>
+
       <dt><code>AllowNoSlash</code></dt>
       <dd>
       <p>By default, <module>mod_rewrite</module> will ignore URLs that map to a
index e1903e5cbaaca8e379f8f31b86564b29778a3323..7646407bf384c78c98c54abf5ce154726ca6d7c9 100644 (file)
@@ -192,6 +192,9 @@ static const char* really_last_key = "rewrite_really_last";
 #define OPTION_NOSLASH              1<<3
 #define OPTION_ANYURI               1<<4
 #define OPTION_MERGEBASE            1<<5
+#define OPTION_INHERIT_DOWN         1<<6
+#define OPTION_INHERIT_DOWN_BEFORE  1<<7
+#define OPTION_IGNORE_INHERIT       1<<8
 
 #ifndef RAND_MAX
 #define RAND_MAX 32767
@@ -2765,7 +2768,9 @@ static void *config_server_merge(apr_pool_t *p, void *basev, void *overridesv)
 
     a->server  = overrides->server;
 
-    if (a->options & OPTION_INHERIT) {
+    if (a->options & OPTION_INHERIT ||
+            (base->options & OPTION_INHERIT_DOWN &&
+             !(a->options & OPTION_IGNORE_INHERIT))) {
         /*
          *  local directives override
          *  and anything else is inherited
@@ -2777,7 +2782,9 @@ static void *config_server_merge(apr_pool_t *p, void *basev, void *overridesv)
         a->rewriterules    = apr_array_append(p, overrides->rewriterules,
                                               base->rewriterules);
     }
-    else if (a->options & OPTION_INHERIT_BEFORE) {
+    else if (a->options & OPTION_INHERIT_BEFORE || 
+            (base->options & OPTION_INHERIT_DOWN_BEFORE &&
+             !(a->options & OPTION_IGNORE_INHERIT))) {
         /*
          *  local directives override
          *  and anything else is inherited (preserving order)
@@ -2854,13 +2861,17 @@ static void *config_perdir_merge(apr_pool_t *p, void *basev, void *overridesv)
 
     a->directory  = overrides->directory;
 
-    if (a->options & OPTION_INHERIT) {
+    if (a->options & OPTION_INHERIT ||
+            (base->options & OPTION_INHERIT_DOWN &&
+             !(a->options & OPTION_IGNORE_INHERIT))) {
         a->rewriteconds = apr_array_append(p, overrides->rewriteconds,
                                            base->rewriteconds);
         a->rewriterules = apr_array_append(p, overrides->rewriterules,
                                            base->rewriterules);
     }
-    else if (a->options & OPTION_INHERIT_BEFORE) {
+    else if (a->options & OPTION_INHERIT_BEFORE || 
+            (base->options & OPTION_INHERIT_DOWN_BEFORE &&
+             !(a->options & OPTION_IGNORE_INHERIT))) {
         a->rewriteconds    = apr_array_append(p, base->rewriteconds,
                                               overrides->rewriteconds);
         a->rewriterules    = apr_array_append(p, base->rewriterules,
@@ -2912,6 +2923,15 @@ static const char *cmd_rewriteoptions(cmd_parms *cmd,
         else if (!strcasecmp(w, "inheritbefore")) {
             options |= OPTION_INHERIT_BEFORE;
         }
+        else if (!strcasecmp(w, "inheritdown")) {
+            options |= OPTION_INHERIT_DOWN;
+        }
+        else if(!strcasecmp(w, "inheritdownbefore")) {
+            options |= OPTION_INHERIT_DOWN_BEFORE;
+        }
+        else if (!strcasecmp(w, "ignoreinherit")) {
+            options |= OPTION_IGNORE_INHERIT;
+        }
         else if (!strcasecmp(w, "allownoslash")) {
             options |= OPTION_NOSLASH;
         }