Suas condições são implicitamente AND 'e sua segunda condição sempre será verdadeira (a menos que você tenha outros domínios), portanto, suas regras atuais redirecionarão apenas o tráfego não SSL.
Você precisa OR
das condições e nega a www
(segunda) condição:
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443 [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
Se SERVER_PORT
não for 443 (por exemplo, não é HTTPS) ou o host não iniciar www.
(por exemplo, você está acessando o domínio básico), redirecione para o URL canônico.
No entanto, se isso vai redirecionar https://example.com
a https://www.example.com
dependerá do seu certificado de segurança. (Seu site precisa estar acessível por www e não www sobre SSL para que o redirecionamento .htaccess seja acionado.)
http://example.com
(por exemplo, HTTP e não www), pois ele primeiro redireciona para HTTPS no mesmo host (por exemplo, semwww
) e, em seguida, redireciona parawww
um segundo redirecionamento. Você pode corrigir isso simplesmente revertendo essas duas regras.