Eu sempre usei algo como o seguinte:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Porque, ocasionalmente, eu gosto de servir HTTP em outras portas além de 80. Bem, eu não gosto de fazer isso, mas às vezes preciso de etc.
%{HTTPS}
será verdadeiro, por exemplo, se o SSL estiver sendo usado pela porta 80.
Acho que costumo usar
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
%{HTTP_HOST}
será sempre o que estiver definido como Host:
pelo cliente.
Ocorre-me, no entanto, que há outra maneira de fazer isso.
<VirtualHost *:80>
ServerName mysite.example.com
Redirect permanent / https://mysite.example.com/
</VirtualHost>
Você notará que não há DocumentRoot no bloco acima. Se você está redirecionando tudo , você não precisa de um.
Se você quiser redirecionar apenas um pouco do seu site para SSL, basta fazer
Redirect permanent /secure https://mysite.example.com/secure
Acho que a opção Redirecionar é mais preferível para o forçamento total de HTTPS do site, porque é um nível de insanidade menor (conforme fornecido gentilmente pelo mod_rewrite).
Pode até ser mais rápido, pois há um módulo a menos para carregar / executar.