Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Amigos,
Alguem sabe qual a melhor forma de colocar o site como https:// ???
Para frisar já possuo o certificado contratado e instalado no servidor.
Se alguem puder me dar uma luz.
Att
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.
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?
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]
>
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()+60602414 / duas semanas */, "/", "meu-site.com", TRUE , TRUE);
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.
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
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] ?
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...
Tem algum problema de fazer sem o .htaccess ?
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);
}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
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.
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
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:
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
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.
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.**
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]
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$path = "//meusite.com.br/" (não se esqueça da barra no final)
<!-- Em todas as páginas -->
<a href=" . $path . "arquivo.php">todas</a>
Como eu disse, o proposito disso é justamente não ter que ficar informando se é http ou https.
mangakah
Acho que agora foi, mas esta acontecendo o seguinte, quando eu acesso uma pagina com HTTPS e depois outra que nao seja HTTPS, ela passa a ser HTTPS, ou seja, tudo vira HTTPS apartir do primeiro acesso em uma pagina https
Sera que tem q mexer em mais alguma coisa no .htaccess ?
mangakah
Vc tem mais alguma sugestao?
o que seria a melhor forma?