Re: RewriteRule and redirect loop with htaccess

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Fri, Aug 2, 2024 at 11:08 AM Dave Wreski <dwreski@xxxxxxxxxxxxxxxxxxx.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?

[Index of Archives]     [Open SSH Users]     [Linux ACPI]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Squid]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux