Em primeiro lugar, você precisa garantir que sua configuração atual esteja preparada para incluir um ouvinte SSL. Você não especificou se está usando o servidor principal ou um <VirtualHost>
, mas se estiver usando o servidor principal, então você precisará mudar para um <VirtualHost>
.
<VirtualHost *:80>
ServerName everything.example.com
ServerAlias *.example.com
VirtualDocumentRoot /var/www/html/%0
# insert logging config, anything else you need..
<Directory /var/www/html/>
Order Allow,Deny
Allow from all
# Get rid of this if you need to allow htaccess files:
AllowOverride None
</Directory>
RewriteEngine On
# We're going to insert some Rewrite configuration here in a minute.
</VirtualHost>
Em seguida, adicionaremos um novo VirtualHost executando o SSL.
# Add this if you don't already have it:
Listen 443
<VirtualHost *:443>
ServerName everything.example.com
ServerAlias *.example.com
VirtualDocumentRoot /var/www/html/%0
SSLEngine On
SSLCertificateFile /path/to/cert.pem
SSLCertificateKeyFile /path/to/private.key
# insert logging config, anything else you need..
<Directory /var/www/html/>
Order Allow,Deny
Allow from all
# Get rid of this if you need to allow htaccess files:
AllowOverride None
</Directory>
# if you want to kick someone back to HTTP if they're using HTTPS,
# do that with Rewrite configuration here. For example:
#RewriteRule ^/(non/sensitive/content.*\.html)$ http://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
Então, isso nos leva ao ponto em que o conteúdo está sendo veiculado via HTTP e HTTPS. Agora, para forçar o HTTPS para determinados domínios, podemos usar mod_rewrite.
Informações importantes sobre segurança! Você precisa ter muito cuidado aqui, do ponto de vista da segurança. Se você está simplesmente redirecionando tudo em HTTP para o equivalente HTTPS, você pode potencialmente "ocultar" casos em que uma solicitação é enviada por HTTP em vez de HTTPS devido a locais de recursos codificados - e se houver dados confidenciais nessa solicitação, era apenas enviado pela internet, sem criptografia. Você precisará ponderar esse risco em relação à sua capacidade de detectar e corrigir esse tipo de problema, a falta de facilidade com o usuário de uma página de erro se algo estiver confuso e a sensibilidade dos dados.
Para forçar o SSL para determinados locais, você vai querer inserir a configuração do mod_rewrite no vhost da porta 80 (eu comentei na sua configuração acima). Você pode criar praticamente qualquer tipo de comportamento que desejar, desde que diretórios ou domínios sejam excluídos; Vou dar alguns exemplos:
# Exclude the domain "static.example.com"
RewriteCond %{HTTP_HOST} !^static\.example\.com$
# Exclude the directory /images
RewriteCond %{REQUEST_URI} !^/images/
# Exclude requests to .css files
RewriteCond %{REQUEST_URI} !\.css$
# This is the more secure but less user friendly version - block requests to the non-secured port.
RewriteRule ^ - [F,L]
# This is the user friendly version, where you need to be especially careful that
# your site never sends sensitive data to http accidentally:
#RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Ou, se você quiser fazer o redirecionamento amigável apenas para solicitações ao diretório base e o comportamento de erro para outras pessoas:
# Exclude the domain "static.example.com"
RewriteCond %{HTTP_HOST} !^static\.example\.com$
# ..insert other exclusion conditions here..
RewriteRule ^/$ https://%{HTTP_HOST}/ [R=301,L]
# Exclude the domain "static.example.com"
RewriteCond %{HTTP_HOST} !^static\.example\.com$
# ..insert other exclusion conditions here..
RewriteRule ^ - [F,L]
Se esses exemplos não atenderem às suas necessidades, avise-nos.