On Fri, Aug 2, 2024 at 11:08 AM Dave Wreski <dwre...@guardiandigital.com.invalid> wrote:
> Hi, > > I have a rewrite that's creating a loop because the origin is contained in >> the final destination. I know it then is processed again by the .htaccess >> in the document root, but I don't understand why or how to stop it. What's >> the solution here? >> >> RewriteRule ^/features/linux-malware-the-truth-about-this-growing-threat$ >> https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat-updated >> [L,R=301,END] >> >> I've tried variations of the above but it always creates a loop. >> >> $ wget -O /dev/null >> https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat >> 2>&1|grep -E 'Location|HTTP' >> HTTP response 302 [ >> https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat >> ] >> HTTP response 301 [ >> https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat-updated >> ] >> HTTP response 200 [https://linuxsecurity.com//features] >> >> Thanks, >> Dave >> >> >> > If you don't depend on mod_rewrite for anything else, I would recommend > using RedirectMatch instead. > > That rule on its own won't loop, unless you have other conflicting > directive or rewrite rules. > > If you must use mod_rewrite, then enabling the rewrite log will help you > pinpoint the source of the loop. > > Are you suggesting RedirectMatch because using RewriteRule when the origin > is a subset of the destination is a known problem? > > Here's what the rewrite log trace looks like: > > rewrite '/features/linux-malware-the-truth-about-this-growing-threat' -> ' > https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat-updated > ' > explicitly forcing redirect with > https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat-updated > escaping > https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat-updated > for redirect > redirect to > https://linuxsecurity.com/features/linux-malware-the-truth-about-this-growing-threat-updated > [REDIRECT/301] > init rewrite engine with requested uri > /features/linux-malware-the-truth-about-this-growing-threat-updated > > it then appears to loop through the htaccess: > > rewrite > 'features/linux-malware-the-truth-about-this-growing-threat-updated' -> > 'index.php' > add per-dir prefix: index.php -> /var/www/linuxsec/html/index.php > trying to replace prefix /var/www/linuxsec/html/ with / > internal redirect with /index.php [INTERNAL REDIRECT] > init rewrite engine with requested uri /index.php > > Thanks, > Dave > This shows that you have another greedy rule that rewrite everything to index.php, and then the loop starts: rewrite 'features/linux-malware-the-truth-about-this-growing-threat-updated' -> 'index.php' Remember, .htaccess files are re-parsed over and over and over and over and over until it stops matching. You likely should be using FallbackResource for that as well. Lastly, why are you using .htaccess files?