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]
Related videos on Youtube
Author by
Christopher
Updated on September 18, 2022Comments
-
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 over 11 yearsI 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 over 11 yearsyes, sorry force of habit in that syntax. The $1 is ok, but you can omit the (?: ) and use only /
-
Stephen Ostermiller over 9 yearsCan you explain a little bit about how this works? A code only answer is only helpful with some exlaination.
-
Unix over 4 yearsIt's exactly what I need and the only one it works for me. Perfect!