Como forçar o SSL / https usando a página .htaccess e mod_rewrite específica no PHP.
Para o Apache, você pode usar mod_ssl
para forçar o SSL com o SSLRequireSSL Directive
:
Esta diretiva proíbe o acesso, a menos que o HTTP sobre SSL (ou seja, HTTPS) esteja ativado para a conexão atual. Isso é muito útil dentro do host ou diretórios virtuais habilitados para SSL para se defender contra erros de configuração que expõem coisas que devem ser protegidas. Quando esta diretiva está presente, todos os pedidos são negados e não estão usando SSL.
Isso não fará um redirecionamento para https. Para redirecionar, tente o seguinte com mod_rewrite
no seu arquivo .htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ou qualquer uma das várias abordagens dadas em
Você também pode resolver isso a partir do PHP, caso seu provedor tenha desabilitado o .htaccess (o que é improvável desde que você solicitou, mas mesmo assim)
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
%{HTTP:X-Forwarded-Proto}
ou%{HTTP:X-Real-Port}
variáveis para verificar se o SSL está ligado.RewriteRule <input-pattern> <output-url>
. Assim, o espaço precisa estar lá, e o single^
diz apenas "corresponder a todos os URLs de entrada".Encontrei uma
mod_rewrite
solução que funciona bem para servidores com e sem proxy.Se você estiver usando CloudFlare, AWS Elastic Load Balancing, Heroku, OpenShift ou qualquer outra solução Cloud / PaaS e estiver enfrentando loops de redirecionamento com redirecionamentos HTTPS normais, tente o seguinte snippet.
fonte
Solução PHP
Tomando emprestado diretamente da resposta muito abrangente de Gordon, notei que sua pergunta menciona ser específico da página para forçar conexões HTTPS / SSL.
Então, tão perto do topo dessas páginas que você deseja forçar a conexão via PHP, você pode
require()
um arquivo centralizado contendo essas (e quaisquer outras) funções personalizadas e simplesmente executar aforceHTTPS()
função.Solução HTACCESS / mod_rewrite
Eu não implementei esse tipo de solução pessoalmente (eu costumava usar a solução PHP, como a acima, por sua simplicidade), mas o seguinte pode ser, pelo menos, um bom começo.
fonte
RewriteCond %{REQUEST_METHOD} !^POST$
?RewriteCond %{REQUEST_METHOD} !^POST$
deve impedir que os envios POST sejam afetados por esses redirecionamentos.Solução baseada em modificação de reescrita:
O uso do código a seguir no htaccess encaminha automaticamente todas as solicitações http para https.
Isso redirecionará suas solicitações http não www e www para a versão www de https.
Outra solução (Apache 2.4 *)
Isso não funciona nas versões inferiores do apache, pois a variável% {REQUEST_SCHEME} foi adicionada ao mod-rewrite desde o 2.4.
fonte
Gostaria apenas de salientar que o Apache tem as piores regras de herança ao usar vários arquivos .htaccess nas profundezas do diretório. Duas armadilhas principais:
RewriteOptions InheritDownBefore
diretiva (ou similar) para alterar isso. (ver pergunta)Isto significa que a solução global sugerida no Apache Wiki se não funcionar se você usar quaisquer outros arquivos .htaccess em subdiretórios. Eu escrevi uma versão modificada que faz:
fonte
Simples e fácil, basta adicionar o seguinte
fonte
Este código funciona para mim
fonte
Simples:
substitua seu URL por example.com
fonte
por apenas forçar o SSL com o Apache .htaccess, você pode usar
para redirecionar a resposta acima está correta
fonte
tente esse código, ele funcionará para todas as versões de URLs, como
http://www.website.com
fonte