Conforme observado nos requisitos de envio da lista de pré-carregamento de HSTS :
- Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.
Você precisa redirecionar para o mesmo host (ou seja, HTTP_HOST
), não apenas para example.com
primeiro. Você não precisa redirecionar para example.com
se o usuário estiver solicitando www.example.com
diretamente. (O teste envolverá uma solicitação para example.com
.) Depois disso, você pode redirecionar para o subdomínio canônico www, se necessário.
I tried to add a redirect before the last line, this way:
RewriteRule ^(.*)$ https://example.com/$1 [R,L]
Isso criaria um loop de redirecionamento, porque a diretiva RewriteCond
anterior aplica-se apenas ao primeiro RewriteRule
, então o segundo RewriteRule
seria executado incondicionalmente.
Tente algo como o seguinte:
# HTTP to HTTPS redirect
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R,L]
# Canonical www redirect
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule (.*) https://www.%{HTTP_HOST}/$1 [R,L]
A variável do servidor HTTP_HOST
contém o valor do cabeçalho da solicitação Host
HTTP (ou seja, qualquer host que esteja sendo solicitado).
O segundo redirecionamento indica ... para todas as solicitações em que o host solicitado não inicia www.
, em seguida, o prefixo www.
para o host. No entanto, isso pode não ser aceitável se você tiver vários subdomínios (que resolvem para o mesmo local) que deseja manter separados, pois eles serão naturalmente redirecionados para o subdomínio www.
Observe que esses são redirecionamentos 302 (temporários). Mude para 301 somente quando tiver certeza de que está funcionando OK.
And: are there any risks?
Sem riscos. Sim, existem potencialmente dois redirecionamentos, enquanto anteriormente só poderia haver um (que é possivelmente menos eficiente). Mas ainda existem apenas dois redirecionamentos, o que é perfeitamente aceitável para SEO. Além disso, com o HSTS, o user-agent só experimentará o redirecionamento duplo no máximo uma vez.
RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Além de: (Ignorando HSTS no momento ...) Isso não seria completo por si só, já que não canoniza uma solicitação para https://example.com/...
(ou seja, HTTPS e domínio ápice).
Outras leituras:
- Minha resposta a uma pergunta relacionada no Pro Webmasters SE que fornece mais detalhes sobre a implementação do HSTS em
.htaccess
: link