RewriteCond %{REQUEST_URI} !/resources/blog
RewriteCond %{QUERY_STRING} ^start=\d+$
RewriteRule (.*) /$1? [L,R=301,QSD]
[Sun Apr 28 15:40:02.614893 2024] ... rewrite 'resources/blog' ->
'index.php'
[Sun Apr 28 15:40:02.614921 2024] ... internal redirect with
/index.php [INTERNAL REDIRECT]
If I don't involve the first RewriteCond, it successfully strips
off the start= from every URL I tried.
What does "INTERNAL REDIRECT" mean? Is that something done outside
of apache? Perhaps by joomla? I believe there are other relevant
redirects after these, but it's very difficult to isolate what's
relevant.
The internal redirect is the result of your rewrite rule, without a
fully qualified URL as a target.
Side note: the "rewrite 'resources/blog' -> 'index.php'" line seems to
contradict your RewriteCond logic, so increasing the verbosity of the
logging and looking at the previous lines will help fix that.
I increased it to trace5, and it did reveal more useful info.
[Sun Apr 28 21:55:36.542349 2024] ... RewriteCond:
input='/resources/blog' pattern='!/resources/blog' => not-matched
It looks like after this it just moved on to the next rewriterule, not
the next rewritecond as part of this block, of sorts. I was assuming it
was more of an AND statement, like "if URI is NOT /resources/blog AND
query string contains start=..., then apply the following rewrite rule,
but that's apparently not how it works.
I only want the rewrite rule above to apply to URLs that don't involve
our blog.
And because the first RewriteCond isn't matched, it doesn't check the
second RewriteCond, and therefore treats the RewriteRule as a standalone
and not part of the previous RewriteRule, so then just redirects to the
root, apparently still with the start= query string attached.
How do I write the logic such that it applies to every URL EXCEPT those
I specify?