]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
don't merge slashes on perdir prefix
authorEric Covener <covener@apache.org>
Tue, 13 Aug 2024 14:12:35 +0000 (14:12 +0000)
committerEric Covener <covener@apache.org>
Tue, 13 Aug 2024 14:12:35 +0000 (14:12 +0000)
Submitted by: Eric Covener

Github: closes #472

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

changes-entries/rewrite-perdir-unc.txt [new file with mode: 0644]
modules/mappers/mod_rewrite.c

diff --git a/changes-entries/rewrite-perdir-unc.txt b/changes-entries/rewrite-perdir-unc.txt
new file mode 100644 (file)
index 0000000..ddc82ee
--- /dev/null
@@ -0,0 +1,3 @@
+  *) mod_rewrite: Don't require [UNC] flag to preserve a leading //
+     added by applying the perdir prefix to the substitution.
+     [Ruediger Pluem, Eric Covener]
index e250518f7b38cb197c85c6f7af893cd1ae6810a8..10ba41a9b5c09edc691a24a1aec3390576928341 100644 (file)
@@ -4327,6 +4327,7 @@ static rule_return_type apply_rewrite_rule(rewriterule_entry *p,
     char *newuri = NULL;
     request_rec *r = ctx->r;
     int is_proxyreq = 0;
+    int prefix_added = 0;
 
     ctx->uri = r->filename;
 
@@ -4491,6 +4492,7 @@ static rule_return_type apply_rewrite_rule(rewriterule_entry *p,
                        newuri, ctx->perdir, newuri);
 
             newuri = apr_pstrcat(r->pool, ctx->perdir, newuri, NULL);
+            prefix_added = 1;
         }
         else if (!(p->flags & (RULEFLAG_PROXY | RULEFLAG_FORCEREDIRECT))) {
             /* Not an absolute URI-path and the scheme (if any) is unknown,
@@ -4504,6 +4506,7 @@ static rule_return_type apply_rewrite_rule(rewriterule_entry *p,
                        newuri, newuri);
 
             newuri = apr_pstrcat(r->pool, "/", newuri, NULL);
+            prefix_added = 1;
         }
     }
 
@@ -4584,7 +4587,7 @@ static rule_return_type apply_rewrite_rule(rewriterule_entry *p,
         return RULE_RC_MATCH;
     }
 
-    if (!(p->flags & RULEFLAG_UNC)) {
+    if (!((p->flags & RULEFLAG_UNC) || prefix_added)) {
         /* merge leading slashes, unless they were literals in the sub */
         if (!AP_IS_SLASH(p->output[0]) || !AP_IS_SLASH(p->output[1])) {
             while (AP_IS_SLASH(r->filename[0]) &&