Hi,
I am not really an expert in rewrite rules but normally the syntax is
RewriteCond: Condition
RewriteRule: If condition is met - use this rule to redirect
The order in which the rules are put is important - in the example above when putting first the redirect to https and then the rule that non-www should be redirect to http you are redirecting back to http instead of https.
So your htaccess would look like this (delete the italic part or replace the existing code by the italic version) - no guarantee it's going to work but worth a try. If not working - you could try to put your question on stackoverflow (regex & redirects are way to technical for most of us)
BEGIN WordPress
<ifmodule mod_rewrite.c="">RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L] => by default all url's in WP are redirected to index.php</ifmodule>
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
=> if file (f) or directory (d) are not found)
RewriteRule . /index.php [L] => redirect to root index
RewriteEngine On => the rewrite engine is already on - no need to put this a second time
RewriteCond %{HTTP_HOST} !^www. => if not www in request
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] => redirect to www
(you could also try this rule:
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteRule .? http://www.example.com%{REQUEST_URI} [R=301,L]
with example.com replaced by your site)
RewriteCond %{HTTPS} !=on => if not https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L] => redirect to https
(You could also try this rule RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} )
END WordPress