On Mon, Aug 19, 2024 at 8:14 AM Eric Covener <cove...@gmail.com> wrote: > > > > > Maybe reverting r757427 > > (https://svn.apache.org/viewvc?view=revision&revision=757427) fixes this. > > My new patch sofar: > > > > Index: modules/mappers/mod_rewrite.c > > =================================================================== > > --- modules/mappers/mod_rewrite.c (revision 1920017) > > +++ modules/mappers/mod_rewrite.c (working copy) > > @@ -4527,20 +4527,6 @@ > > * ourself). > > */ > > if (p->flags & RULEFLAG_PROXY) { > > - /* For rules evaluated in server context, the mod_proxy fixup > > - * hook can be relied upon to escape the URI as and when > > - * necessary, since it occurs later. If in directory context, > > - * the ordering of the fixup hooks is forced such that > > - * mod_proxy comes first, so the URI must be escaped here > > - * instead. See PR 39746, 46428, and other headaches. */ > > - if (ctx->perdir && (p->flags & RULEFLAG_NOESCAPE) == 0) { > > - char *old_filename = r->filename; > > - > > - r->filename = ap_escape_uri(r->pool, r->filename); > > - rewritelog(r, 2, ctx->perdir, "escaped URI in per-dir context " > > - "for proxy, %s -> %s", old_filename, r->filename); > > - } > > - > > fully_qualify_uri(r); > > > > rewritelog(r, 2, ctx->perdir, "forcing proxy-throughput with %s", > > @@ -5392,12 +5378,17 @@ > > return HTTP_FORBIDDEN; > > } > > > > - /* make sure the QUERY_STRING and > > - * PATH_INFO parts get incorporated > > + if (rulestatus == ACTION_NOESCAPE) { > > + apr_table_setn(r->notes, "proxy-nocanon", "1"); > > + } > > This seems to preserve 2.4.58 behavior of [P,NE] in per-dir. > We should re-document NE in this context though > > > + > > + /* make sure the QUERY_STRING gets incorporated, but only > > + * if we do not escape the target. Otherwise the mod_proxy > > + * canon handler will take care to do this. > > nit: I don't think we will ever escape the target later though [in > mod_rewrite]. > > > > * (r->path_info was already appended by the > > * rewriting engine because of the per-dir context!) > > */ > > - if (r->args != NULL) { > > + if ((r->args != NULL) && (rulestatus == ACTION_NOESCAPE)) { > > /* see proxy_http:proxy_http_canon() */ > > r->filename = apr_pstrcat(r->pool, r->filename, > > "?", r->args, NULL); > > nit: It might be more clear here to check (or memoize) proxy-nocanon > directly, for the same confusion as above.
Or maybe not remember we set it, as they could have proxy-nocanon set directly. -- Eric Covener cove...@gmail.com