Forçando SSL e www em .htaccess

12

Estou procurando uma maneira de forçar SSL e www.

Consegui forçar os dois separadamente, mas juntos continuo enfrentando problemas de redirecionamento. O código a seguir funciona ao manipular uma URL nesse formato: http://example.come redireciona corretamente para, https://www.example.commas quando a URL de entrada está, https://example.comela não encaminhará para https://www.example.com- Alguma sugestão?

EDIT: também deve enviar http://www.example.compara https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Stephen
fonte

Respostas:

7

A primeira linha é usada para impedir que URLs internas sejam reescritas. Isso pode causar a exibição de páginas diferentes, então eu a removi.

Se o host for example.comou não for solicitado por HTTPS, ele será reescrito para https://example.com/. Ou seja, ele reescreve http://example.com, http://www.example.come https://example.compara https://www.example.comem uma ação.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Documentação em mod_rewrite para Apache 2.2 .

Se você tem subdomínios como forum.example.com, a primeira regra deve ser como é. Caso contrário, você também pode fazer uma correspondência negativa www.example.com.

Lekensteyn
fonte
0

A terceira linha não precisa ser:

RewriteCond %{HTTP_HOST} ^example\.com$
Piers Karsenbarg
fonte
0

Tente o seguinte:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
Arvin
fonte
0

Você também pode usar as seguintes linhas que eu uso e trabalho na perfeição.

(Remova o RewriteCond superior, se você não usar o CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
itteam
fonte
0

Acabei de implementar isso no meu site. Funciona como um encanto! Adicionado à parte superior do meu arquivo .htaccess. Redireciona todas as instâncias de pessoas digitando www ou não www, http ou https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect
user67283
fonte
0

Testei todas as sugestões fornecidas acima, mas nenhuma abrangeu todo o cenário.

Eu queria que todos os visitantes fossem para https://www.example1.com/

Alguns dos códigos fornecidos por outros usuários trabalharam para levar URL não seguro e / ou não www para https://www.example1.com/, no entanto, nenhum deles coberto https://example1.compara ser convertido em "www" também.

Eu tenho meu site hospedado no GoDaddy, caso isso faça alguma diferença.

Este é o código que funcionou para mim:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www.example1\.com$ [OR]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example1.com/$1 [L,R=301]

A última linha também pode ser:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Mas usei o código "301" para enviar a mensagem " movido permanentemente ", na esperança de que o Google e talvez outros mecanismos de pesquisa atualizem links antigos.

onpre
fonte