Re: Stripping trailing slashes (again)

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

 





On Thu, Jul 11, 2024 at 6:55 AM Konstantin Kolinko <knst.kolinko@xxxxxxxxx> wrote:
чт, 13 июн. 2024 г. в 17:41, Dave Wreski <dwreski@xxxxxxxxxxxxxxxxxxx.invalid>:
>
> Hi,
>
> Some time ago I requested help with a rewrite rule to strip trailing slash(es) from all URLs in our joomla website, but I'm still having problems. This is the rule I am currently working with:
>
> RewriteRule ^(.*)/+$ https://linuxsecurity.com$1 [R=301,L]
>
> It works fine for any URL other than the homepage. Somehow for the homepage it creates an infinite loop, despite using "L", so perhaps I don't understand what it's doing. The (.*) is supposed to match any character, but there wouldn't be any preceding elements for the homepage.
>
> The problem as I see it is that, for the homepage, (.*) would be null, so $1 would also be null? This then creates the same URL as the one we're trying to fix.

(.*) means "any character, 0 or more times".
"0 times" here means that it matches an empty string. (Technically, it
is an empty string, not null).

URL for the home page is "/".

(The first line of an HTTP 1.x request will be "GET / HTTP/1.1".
By definition of the protocol, there has to be some text between the
verb (GET) and the version.)

A possible solution that I see is to make the first '/' explicit.
adding it both to the regexp and to the replacement string:

  RewriteRule ^/(.*)/+$ https://linuxsecurity.com/$1 [R=301,L]

Alternatively, use '+' instead of '*' (meaning 1 or more times):

  RewriteRule ^(.+)/+$ https://linuxsecurity.com$1 [R=301,L]

Best regards,
Konstantin Kolinko

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands, e-mail: users-help@xxxxxxxxxxxxxxxx


You're missing a key part of the engine here; in the per-directory context, the leading / cannot be matched.  Per-directory means either .htaccess, <Directory> or <Location>.  To make the rule work in both server and per-directory context, use the conditional modifier:

^/?(<pattern>)

To stop loops, add a proper RewriteCond directive prior, and exclude whatever URI you need. 

[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