Quase lá!
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Minha primeira resposta usou equivocadamente SERVER_NAME, que não é necessariamente igual a HTTP_HOST. O nome do servidor pode ser qualquer coisa e muito diferente do nome de domínio usado para acessá-lo.