Remove multiple trailing slashes in a single 301 in .htaccess?

7,824

Solution 1

If the slashes may only occur at the end of the URL, you may use this

RewriteCond %{REQUEST_URI} ^(.*?)(?:/){2,}$
RewriteRule . $1/ [R=301,L]

Solution 2

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{THE_REQUEST} ^[A-Z]+\s//+(.*)\sHTTP/[0-9.]+$ [OR]
RewriteCond %{THE_REQUEST} ^[A-Z]+\s(.*/)/+\sHTTP/[0-9.]+$
RewriteRule .* http://%{HTTP_HOST}/%1 [R=301,L]
Share:
7,824

Related videos on Youtube

Christopher
Author by

Christopher

Updated on September 18, 2022

Comments

  • Christopher
    Christopher almost 2 years

    There is a similar question here, but the solution does not work in Apache for our site.

    I'm trying to remove multiple trailing slashes from URLs on our site. I found some .htaccess code that seems to work:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
    RewriteRule . %1/%2 [R=301,L]
    

    This rule removes multiple slashes from anywhere in the URL:

    http://www.mysite.com/category/accessories////
    becomes
    http://www.mysite.com/category/accessories/
    

    However, it redirects once for every extra slash. So:

    http://www.mysite.com/category/accessories///////
    301 Redirects to
    http://www.mysite.com/category/accessories//////
    301 Redirects to
    http://www.mysite.com/category/accessories/////
    301 Redirects to
    http://www.mysite.com/category/accessories////
    301 Redirects to
    http://www.mysite.com/category/accessories///
    301 Redirects to
    http://www.mysite.com/category/accessories//
    301 Redirects to
    http://www.mysite.com/category/accessories/
    

    Is it possible to rewrite this rule so that it does it all in a single 301 redirect?

    Also, this above directive does not work at the root level of our site:

    http://www.mysite.com///// does not redirect but it should.
    
  • MrWhite
    MrWhite over 11 years
    I think you mean %1 (back reference to the RewriteCond pattern) in your RewriteRule, rather than $1? As it stands you will always be redirected back to the document root. Also, I'm curious as to whether (?:/) is required in the RewriteCond, can you not simply use /?
  • PatomaS
    PatomaS over 11 years
    yes, sorry force of habit in that syntax. The $1 is ok, but you can omit the (?: ) and use only /
  • Stephen Ostermiller
    Stephen Ostermiller over 9 years
    Can you explain a little bit about how this works? A code only answer is only helpful with some exlaination.
  • Unix
    Unix over 4 years
    It's exactly what I need and the only one it works for me. Perfect!