Forcing SSL and www in .htaccess

8,475

The first line is used to prevent internal URL's from being rewritten. That might cause different pages to be displayed, so I've removed it.

If the host is example.com or is not requested over HTTPS, it will be rewritten to https://example.com/. I.e., it rewrites http://example.com, http://www.example.com and https://example.com to https://www.example.com in one action.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Documentation on mod_rewrite for Apache 2.2.

If you've subdomains like forum.example.com, the first rule should be as is. Otherwise, you can do a negative match against www.example.com as well.

Share:
8,475

Related videos on Youtube

Stephen
Author by

Stephen

Updated on September 17, 2022

Comments

  • Stephen
    Stephen over 1 year

    I'm looking for a way to force SSL and www.

    I've been able to force both separately but together I keep running into redirection issues. The following code works when handling a URL in this format: http://example.com and properly redirects to https://www.example.com but when the incoming URL is https://example.com it will not forward to https://www.example.com - Any suggestions?

    EDIT: it should also send http://www.example.com to https://www.example.com.

    RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
    RewriteCond %{SERVER_PORT} 80
    RewriteCond %{HTTP_HOST} !^www.example\.com$
    RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]