Você precisa de três redirecionamentos para fazer o que quiser:
http://example.com
a https://www.example.com
http://www.example.com
a https://www.example.com
https://example.com
a https://www.example.com
Os dois primeiros são da porta 80 HTTP simples, então você tem um VirtualHost para eles. Você pode aplicar uma seção VirtualHost a mais de um nome de host (www.example.com e example.com) por meio de uma seção ServerAlias:
# Redirect http://example.com and http://www.example.com to main site
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
Redirect / https://www.example.com/
</VirtualHost >
Em seguida, você precisa de um VirtualHost para o seu link apenas. HTTPS usa a porta 443:
# Redirect https://example.com to main site
<VirtualHost *:443>
ServerName example.com
Redirect / https://www.example.com/
</VirtualHost >
Observação: você também precisará definir suas configurações de SSL, com um certificado que suporte AMBOS o domínio com e sem o "www.". A configuração das configurações de SSL está fora do escopo desta questão. ( Informações adicionadas: podem ser dois certificados separados, se você quiser; está se tornando mais comum ter muitos certificados separados, agora temos coisas como Let's Encrypt e SNI )
Se você não tiver um certificado SSL que suporte seu domínio sem o "www." então você não poderá fazer o redirecionamento de https://example.com
. O redirecionamento só acontecerá depois que o navegador verificar o certificado. O usuário seria apresentado a um erro de certificado incompatível.
Então, finalmente, você precisa da sua seção VirtualHost para o site "válido": HTTPS (porta 443) em www.example.com:
# Main site
<VirtualHost *:443>
ServerName www.example.com
# Put all your configuration for this site here
</VirtualHost >
Depois de ter testado seus redirecionamentos e você está feliz por eles estarem funcionando, você pode torná-los permanentes especificando o status 301 no redirecionamento (alterando Redirect / https://www.example.com/
para Redirect 301 / https://www.example.com/
em todos os lugares) e habilitando HSTS que força os navegadores dos usuários a lembrar a preferência por HTTPS.