Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano Barbosa

Qual a melhor forma de colocar o site como https?

Recommended Posts

Então tente acessar seu site usando HTTPS:

 

 

https://www.seu-dominio.com.br

 

Se conseguir, então está instalado OK. Não precisa fazer mais nada. Já se você quer forçar o uso de HTTPS em todas as requisições, além de converter todos os links para HTTPS, você precisa dar essa seguinte instrução ao Apache (supondo que você esteja usando Apache) no .htaccess:

 

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

Sempre que alguém tentar acessar o site sem HTTPS (apenas com HTTP), será redirecionado para a versão com HTTPS.



Mas tenha em mente que isso irá impactar negativamente a performance e aumentar o uso de recursos do servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, muito boa sua sugestão, mas se vai implicar no servidor melhor nao usar.

 

Pretendo colocar apenas em algumas páginas, entao nas paginas que eu colocar eu coloco https em todas as url s? de images inclusive?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, mangakah, conforme você me enviou a resposta vamos manter tudo dentro do tópico você me enviou o conteúdo:

 

 

 

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} ^/login RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

Que pode servir de referencia para o Adriano também, mas conforme ele falou a minha dúvida é a mesma dele eu tenho cerca de 4 páginas que gostaria de forçar a entrada em HTTPS que são as seguintes:

 

Administrator/login

 

Members-Login

 

Frontend-Login

 

Sign-In

 

Então ficaria assim?

 

 

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} ^Administrator/loginRewriteCond %{REQUEST_URI} ^Members-LoginRewriteCond %{REQUEST_URI} ^Frontend-LoginRewriteCond %{REQUEST_URI} ^Sign-InRewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, muito boa sua sugestão, mas se vai implicar no servidor melhor nao usar.

 

Pretendo colocar apenas em algumas páginas, entao nas paginas que eu colocar eu coloco https em todas as url s? de images inclusive?

 

Para usuários não-logados, basta colocar em páginas que contém formulários ou informações sensíveis. Para usuários logados, você precisa se certificar de que tudo esteja sobre HTTPS.

 

Quanto a resources (imagens, scripts, folhas de estilos, fontes, etc.), estes também precisam estar sobre HTTPS ou não adianta nada você ter HTTPS.

 

 

 

 

(...)

 

Então ficaria assim?

 

 

RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{REQUEST_URI} ^Administrator/loginRewriteCond %{REQUEST_URI} ^Members-LoginRewriteCond %{REQUEST_URI} ^Frontend-LoginRewriteCond %{REQUEST_URI} ^Sign-InRewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

 

Quase...

 

Cada condição (RewriteCond) deve estar em uma linha.

 

Como eu disse para você via MP, REQUEST_URI é tudo que vier a partir de '/' (sem contar aquelas do http:// ou https://). No endereço deste tópico, por exemplo:

http://forum.imasters.com.br/topic/495736-qual-a-melhor-forma-de-colocar-o-site-como-https/

 

e o REQUEST_URI é:

/topic/495736-qual-a-melhor-forma-de-colocar-o-site-como-https/

 

E se eu quiser condicionar uma regra para todos os URIs que iniciam com /topic eu uso este pattern:

^/topic

 

O ^ significa "começando em...". Se quiser algo "terminando em...", use $ no final, ex:

\.jpeg$

 

 

Todos terminando em ".jpeg".

 

 

 

Portanto, deve ficar assim (não testei mas creio estar correto):

RewriteEngine On
RewriteCond %{HTTPS} !=on 
RewriteCond %{REQUEST_URI} ^/Administrator/login
RewriteCond %{REQUEST_URI} ^/Members-Login
RewriteCond %{REQUEST_URI} ^/Frontend-Login
RewriteCond %{REQUEST_URI} ^/Sign-In
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

 

 

Agora que você está tirando o SSL/TLS forçado em todas as páginas, é preciso tomar o cuidado de não deixar que usuários logados acabem indo para uma página ou façam uma requisição para um imagem, script, folha de estilo ou fonte sem HTTPS. Para os usuários logados, todas as requisições devem estar sobre HTTPS para evitar que o cookie de sessão sejam passado ás claras (sem criptografia).

 

Eu faço o seguinte: ao invés de colocar o protocolo, em coloco apenas //. Exemplo:

<script src="//meusite.com/scripts/jquery.min.js"></script>
<img src="//meusite.com/imagens/meu-logo.gif">
<!-- ... -->

 

 

Com isso o navegador usa o protocolo que estiver na página que está linkando esses resources.

 

 

Também é importante você definir esse cookie com as flags httpOnly e Secure, assim o navegador não permitirá que ele seja acessado via JavaScript e não o enviará em uma conexão insegura (http simples):

 

setcookie ( "session", "<ID da Sessão>", time()+60*60*24*14 /* duas semanas */, "/", "meu-site.com", TRUE , TRUE);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom! Mas funcionou nas duas primeiras urls :

 

 

Administrator/login

 

Members-Login

 

Que são os respectivos painéis de controle do administrador e Membros

 

As duas seguintes não entendi o motivo porque não está entrando em HTTPS, são duas entradas que ficam na homepage do site.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente escapar o caractere '-', ao invés de apenas '-' coloque '\-'.



Ops... esqueci de uma coisa... coloque assim:

 

 

RewriteCond %{REQUEST_URI} ^/Administrator/login [OR]
RewriteCond %{REQUEST_URI} ^/Members-Login [OR]
RewriteCond %{REQUEST_URI} ^/Frontend-Login [OR]
RewriteCond %{REQUEST_URI} ^/Sign-In

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu amigão eu coloquei assim e deu tudo certo:

 

 

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} ^/Administrator/login [OR]
RewriteCond %{REQUEST_URI} ^/Members-Login [OR]
RewriteCond %{REQUEST_URI} ^/Frontend-Login [OR]
RewriteCond %{REQUEST_URI} ^/Sign-In
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Só uma curiosidade para encerrar a questão: Porque não é necessário fechar a última linha ^/Sign-In com [OR] ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

OR significa OU em inglês.

 

A relação entre uma condição e outra pode ser AND (E) ou OR (OU). Se não usar [OR] o Apache entende que a duas condição tem relacionamento AND. E por isso não estava funcionando, pois se estava dizendo para o Apache que para aplicar a regra REQUEST URI teria de começar com /Administrator/login, com /Members-Login, etc. o que é impossível.

 

Essas condições significam:

 

 

 

 - HTTPS não é 'on' (não está ligado) E


 - REQUEST URI inicia em /Administrator/login OU - REQUEST URI inicia em /Members-Login OU
 - REQUEST URI inicia em /Frontend-Login OU
 - REQUEST URI inicia em /Sign-In

 

Espero que tenha dado pra entender...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem algum problema de fazer sem o .htaccess ?

 

Você quer dizer usando PHP?

 

Sem problema:

 

if(
  (!isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] != "on")
  and (
    preg_match("/^\/Administrator\/login/", $_SERVER['REQUEST_URI']) or
    preg_match("/^\/Members-Login/", $_SERVER['REQUEST_URI']) or
    preg_match("/^\/Frontend-Login/", $_SERVER['REQUEST_URI']) or
    preg_match("/^\/Sign-In/", $_SERVER['REQUEST_URI'])  
  )
){
    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("Location: $redirect", true, 301);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim em PHP

isso eu coloco em todas as paginas?

Outra coisa, você mencionou lá emcima que utiliza o path da seguinte forma:

 

<img src="//meusite.com/imagens/meu-logo.gif">

 


O exemplo que você deu agora é para usar com o path como você citou no exemplo?

Att

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é que você tenha um index.php único, que faz o roteamento, é uma péssima prática ficar criando vários arquivos públicos. Eu sei que isso é complicado de início, mas é uma boa prática.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso eu coloco em todas as paginas?

 

Coloque em uma arquivo que você já importa em todos os arquivos que criam páginas (como um config.php, functions.php, etc.).

 

 

 

Outra coisa, você mencionou lá emcima que utiliza o path da seguinte forma:

 

<img src="//meusite.com/imagens/meu-logo.gif">

 

O exemplo que você deu agora é para usar com o path como você citou no exemplo?

 

Usar a URL sem o protocolo (http ou https) em um elemento embutido (<img>, <link>, <script>, <object>, etc) faz com que o navegador use o protocolo da página quer requer este elemento.

 

 

Por exemplo, em sua página inicial há uma imagem de logo:

 

<img src="//meusite.com/imagens/meu-logo.gif">

Se um visitante acessar seu site usando o protocolo HTTP simples

 

 

http://meusite.com

 

O navegador irá requisitar a imagem também com HTTP

 

 

 

http://meusite.com/imagens/meu-logo.gif

 

Já se acessar a mesma página usando HTTPS, aí o navegador irá usar esse protocolo para requisitar a imagem:

 

 

https://meusite.com/imagens/meu-logo.gif

 

O termo técnico para isso é "protocol-independent url": um endereço (URL) independente de protocolo.

 

O ideal é que você tenha um index.php único, que faz o roteamento, é uma péssima prática ficar criando vários arquivos públicos. Eu sei que isso é complicado de início, mas é uma boa prática.

:joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou fazendo da seguinte forma:

 

 

if((!isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] != "on")
    and (
        preg_match("/^\/perfil.php/", $_SERVER['REQUEST_URI']) or       
        preg_match("/^\/endereco.php/", $_SERVER['REQUEST_URI']) or
        preg_match("/^\/login.php/", $_SERVER['REQUEST_URI'])
    )
){
    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("Location: $redirect", true, 301);
}

Aparentemente funcionou, só que nao aparece o HTTPS:// na url, é como se ainda estivesse navendo por http



Tentei adapitar ao meu htaccess, mas nao tive muito sucesso, esta dando erro.

 

FileETag none
ServerSignature Off
Options All -Indexes

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} ^/perfil.php [OR]
RewriteCond %{REQUEST_URI} ^/endereco.php [OR]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^(.*)$ index.php?page=$1

Compartilhar este post


Link para o post
Compartilhar em outros sites
RewriteCond %{REQUEST_URI} ^/perfil\.php [OR]
RewriteCond %{REQUEST_URI} ^/endereco\.php

 

No último RewriteCond não pode ter [OR] e é bom escapar o caractere . (ponto) pois ele é um meta-caractere em expressões regulares.

 

Quanto ao código PHP, testei aqui e funcionou OK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vi esse erro só agora

 

Essa linha aqui esta correta?

RewriteRule ^(.*)$ index.php?page=$1

 

é pra onde roda todo o site com url amigavel, vc quer q eu mande pra vc entender melhor?



Não ta funcionando, me retorna o seguinte:

 

Redirecionamento incorreto
O Firefox detectou que o pedido para este endereço não será concluído devido à forma que o servidor o está redirecionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites


RewriteEngine On

 

 

RewriteCond %{HTTPS} !=on

RewriteCond %{REQUEST_URI} ^/perfil.php [OR]

RewriteCond %{REQUEST_URI} ^/endereco.php

RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?page=$1 [L]

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

mangakah

 

Agora até que funcionou, mas estou confuso no seguinte.

 

criei um path da seguinte forma

$path = "//meusite.com.br"

 

esse path esta sendo chamado em todas as imagens e links ok?

no caso da pagina perfil eu devo chamar dessa forma:

 

<a href="https:".$path."perfil.php">perfil</a>

e no caso das outras paginas seria:

<a href="http:".$path."outras.php">outras</a>

acho q to confuso nisso

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.