Redirect all http AND https non-www URLS to https://www.example.com via htaccess
@Simbus82 is right about inverting the rules. Here is an approach that is slightly more universal.
RewriteEngine On
# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
You need a certificate that is valid for both example.com
and www.example.com
if you're going to rewrite those requests to www.example.com
(or two separate certs that accomplish this). There's no way around this.