Olá,
Recentemente necessitei implantar um certificado SSL para que uma aplicação de um cliente tivesse conexão segura em seu site, no entanto, o HTTPS é somente necessário para operações com o carrinho de compras e/ou tráfego de dados confidenciais, não sendo necessário, por exemplo, para leitura de textos, etc.
O método mais inteligente é você sempre forçar o SSL [HTTPS] para as páginas de autenticação, cadastros e carrinho de compras e sempre forçar o HTTP (sem SSL) às demais páginas.
Tive de ler toda a documentação do mod_rewrite do Apache, mas tudo bem:
[php]RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(carrinho|login) [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301][/php]
O que o código acima, inserido no .htaccess da raiz da aplicação, faz? Se o usuário digitar https://www.dominio.com.br/produto/listar/32, por exemplo, automaticamente ele será redirecionado para a mesma url com HTTP (sem SSL), pois não se trata de uma url que contenha “/carrinho” ou “/login”.
Ficou faltando a url principal sempre ser forçada para HTTP em vez de HTTPS, pois nela, não há conteúdo confidencial para ser obrigatório o uso do SSL, logo adicionei o código:
[php]RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} !^ACT= [NC]
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond $1 ^$ [NC]
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301][/php]
Agora, depois de inserir os dois códigos acima, vamos para o arquivo de configuração do VirtualHost no Apache e adicionar as seguintes linhas:
[php]Redirect permanent /identificacao/novo-cadastro https://www.dominio.com.br/identificacao/novo-cadastro
Redirect permanent /carrinho https://www.dominio.com.br/carrinho[/php]
Bom, com o código acima no arquivo de configuração do Apache, toda vez que o usuário entrar no carrinho ou for se identificar, ele será forçado para o HTTPS e, nas demais páginas, será forçado para HTTP.
Abraços a todos.