.htaccess [permanent] redirect http to https + clean URLs

Go from www.website.com to https://www.website.com; and from https://www.website.com/page.html to https://www.website.com/page

Assuming you have your SSL certificate installed, here's a quick solution that has worked for me in every single one of my projects:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

Explanation

First four lines deal with the redirect itself:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301]

In this case, as the world wide standard has it, I'm defaulting all of my domains to the full version: https://www.domain.com. I see some odd ones who strip it all down to just https://domain.com, and I used to be one of them...

The remaining 6 lines of code deal with the whole 'Clean URL' thing:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]

Here you're essentially telling it to strip away all of your URL endings (domain.com/contact.html vs domain.com/contact) – permanently.

Your extension might differ from the one in this example (.html). All you would need to do is simply replace .html with .php, or .shtml, or whatever else you might have. Be sure you update all 4 lines of code.

Enjoyed what you saw? Stay updated by following me.


Share this page