Search code examples
apache.htaccesshttp-redirectmod-rewriteexpressionengine

Htaccess Redirects - Combine many rules in one single redirect


I am trying to combine more rules in a single redirect, right now I have many rules and many redirects, like in the picture attached, but for SEO purpose this is not a good behavior.

enter image description here

The story is this: I have an old url, which doesn't exist anymore and a new one, where I want to be redirected. If the requested url doesn't have www. and https then I want to add them.Also if the url has an slash at the end, I want to remove it. All is working right now, but in many steps.

This is what I have in my .htaccess file:

301 redirect from old url to the new one with www.

RewriteRule ^source1/source2$ https://www.domain.com/destination1/destination2 [L,R=301]

Remove the slash from the end of URL

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

Redirect to https

#-----------------redirect to https-----------------
RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www.domain.com(.*)$ [NC]
RewriteRule (.*) https://www.domain.com%{REQUEST_URI} [L,R=301]

I use all of these rules inside this directive:

<IfModule mod_rewrite.c>

Solution

  • Have it like this to avoid multiple 301 for SEO purpose:

    # specific redirects
    RewriteRule ^source1/source2/?$ https://www.domain.com/destination1/destination2 [L,R=301,NC]
    
    # Remove the slash from the end of URL
    RewriteCond %{REQUEST_URI} !^/system [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ https://www.domain.com/$1 [R=301,L,NE]
    
    #-----------------redirect to https-----------------
    RewriteCond %{HTTPS} !on [OR]
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.domain.com%{REQUEST_URI} [L,R=301,NE]
    

    Make sure to clear your browser cache completely before testing this change.