On 6/28/23 12:38 PM, cove...@apache.org wrote:
> Author: covener
> Date: Wed Jun 28 10:38:27 2023
> New Revision: 1910650
> 
> URL: http://svn.apache.org/viewvc?rev=1910650&view=rev
> Log:
> act more like pre-r1908097 with rewrite
> 
> - be more conservative with setting QSNONE
> - allow the query to be split as historically, but then drop r->args if QSNONE
> 
> 
> 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=1910650&r1=1910649&r2=1910650&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/mappers/mod_rewrite.c (original)
> +++ httpd/httpd/trunk/modules/mappers/mod_rewrite.c Wed Jun 28 10:38:27 2023
> @@ -806,12 +806,6 @@ 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.
>       */
> @@ -853,6 +847,10 @@ 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;
> +        }

Why moving it here? This means that we remove '?' that where originally encoded 
in the URL and everything after this from the
resulting URL due to the

*q++ = '\0';

above, but we don't put them in r->args either if RULEFLAG_QSNONE is set e.g. 
if we end on a '?' in the rewrite template and no
QSA / QSD being set. I think in this case we should not touch any '?' in the 
result and just treat them as decoded '?' that get
renencoded e.g. when forwarding the URL to a backend.

Regards

RĂ¼diger

Reply via email to