You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by co...@apache.org on 2023/06/28 12:27:34 UTC

svn commit: r1910661 - /httpd/httpd/trunk/modules/mappers/mod_rewrite.c

Author: covener
Date: Wed Jun 28 12:27:33 2023
New Revision: 1910661

URL: http://svn.apache.org/viewvc?rev=1910661&view=rev
Log:
revert recent r1910650

Modified:
    httpd/httpd/trunk/modules/mappers/mod_rewrite.c

Modified: httpd/httpd/trunk/modules/mappers/mod_rewrite.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/mappers/mod_rewrite.c?rev=1910661&r1=1910660&r2=1910661&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/mappers/mod_rewrite.c (original)
+++ httpd/httpd/trunk/modules/mappers/mod_rewrite.c Wed Jun 28 12:27:33 2023
@@ -806,6 +806,12 @@ static void splitout_queryargs(request_r
     int qsdiscard = flags & RULEFLAG_QSDISCARD;
     int qslast = flags & RULEFLAG_QSLAST;
 
+    if (flags & RULEFLAG_QSNONE) {
+        rewritelog(r, 2, NULL, "discarding query string, no parse from substitution");
+        r->args = NULL;
+        return;
+    }
+
     /* don't touch, unless it's a scheme for which a query string makes sense.
      * See RFC 1738 and RFC 2368.
      */
@@ -847,10 +853,6 @@ static void splitout_queryargs(request_r
                r->args[len-1] = '\0';
            }
         }
-        if (flags & RULEFLAG_QSNONE) {
-            rewritelog(r, 2, NULL, "discarding query string, no parse from substitution");
-            r->args = NULL;
-        }
 
         rewritelog(r, 3, NULL, "split uri=%s -> uri=%s, args=%s", olduri,
                    r->filename, r->args ? r->args : "<none>");
@@ -3907,15 +3909,15 @@ static const char *cmd_rewriterule(cmd_p
     }
 
     if (*(a2_end-1) == '?') {
-        if (!(newrule->flags & RULEFLAG_QSAPPEND) &&
-            !(newrule->flags & RULEFLAG_QSLAST)) {
-            /* Rule ends with a literal ?, make sure we don't end up with any query */
+        *(a2_end-1) = '\0'; /* trailing ? has done its job */
+        /* a literal ? at the end of the unsubstituted rewrite rule */
+        if (!(newrule->flags & RULEFLAG_QSAPPEND))
+        {
             newrule->flags |= RULEFLAG_QSNONE;
         }
     }
     else if (newrule->flags & RULEFLAG_QSDISCARD) {
         if (NULL == ap_strchr(newrule->output, '?')) {
-            /* QSD and no literal ? in substitution, make sure we don't end up with any query */
             newrule->flags |= RULEFLAG_QSNONE;
         }
     }