Eu escrevi uma pequena função para estabelecer o protocolo de URL do site atual, mas não tenho SSL e não sei como testar se funciona em https. Você pode me dizer se isso está correto?
function siteURL()
{
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$domainName = $_SERVER['HTTP_HOST'].'/';
return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
É necessário fazê-lo como acima ou posso fazê-lo como ?:
function siteURL()
{
$protocol = 'http://';
$domainName = $_SERVER['HTTP_HOST'].'/'
return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
Sob SSL, o servidor não converte automaticamente o URL para https, mesmo que o URL da tag de âncora esteja usando http? É necessário verificar o protocolo?
Obrigado!
Respostas:
Não é automático. Sua função principal parece boa.
fonte
//mysqite.com
vez dehttps://mysitecom
Sei que é tarde, embora exista uma maneira muito mais conveniente de resolver esse tipo de problema! As outras soluções são bastante confusas; é assim que eu faria:
... ou mesmo sem condição, se você preferir:
Dê uma olhada em
$_SERVER["SERVER_PROTOCOL"]
fonte
stripos
vez destrpos
?$_SERVER['SERVER_PROTOCOL']
feito para armazenarHTTP/1.0
ou,HTTP/1.1
dependendo da versão do protocolo, de que tipo de configuração do servidor HTTP você se refere, armazenandohttps
informações sobre essa cadeia de caracteres provenientes da consulta http?Isso funciona para mim
fonte
Algumas mudanças:
fonte
atalho
fonte
REQUEST_SCHEME
não é confiávelComo o número da porta de teste não é uma boa prática, minha solução é:
A
HTTPS
constante retornaTRUE
se$_SERVER['HTTPS']
é configurada e é igual a "1", "true", "on" ou "yes". Retorna FALSE caso contrário.fonte
Para qualquer sistema, exceto o IIS, isso é suficiente para definir o URL próprio do site:
ou
depende do que você deseja exatamente: HTTP_HOST vs. SERVER_NAME
fonte
No caso de proxy,
SERVER_PORT
pode não fornecer o valor correto, e foi isso que funcionou para mim -fonte
Use esta variável de servidor para obter os detalhes do protocolo:
Observe que essa variável do servidor não é confiável. Para mais informações, consulte: $ _SERVER ['REQUEST_SCHEME'] é confiável?
fonte
Sei que essa é uma pergunta antiga, mas me deparei com isso hoje, pois precisava testar isso no meu site. Parece que as respostas acima são desnecessariamente complicadas. Para estabelecer o protocolo do site, tudo que você precisa fazer é testar
$_SERVER['HTTPS']
Se o protocolo estiver usando HTTPS, ele
$_SERVER['HTTPS']
retornará 'on'. Caso contrário, a variável permanecerá vazia. Por exemplo:// test if HTTPS is being used. If it is, the echo will return '$SSL_test: on'. If not HTTPS, '$SSL_test' will remain empty.
$SSL_test = $_SERVER['HTTPS'];
Você pode usar o acima para testar de maneira fácil e limpa o HTTPS e implementar de acordo. :)
fonte
fez uma função usando a resposta do Rid Iculous que funcionou no meu sistema.
Espero que ajude
fonte
Testei a resposta mais votada e não funcionou para mim , acabei usando:
fonte
$_SERVER["HTTPS"]
e, portanto, seu código pode retornarhttp://
mesmo que deva serhttps://
https
, por que o código ainda retornaráhttps
?$_SERVER["HTTPS"]
variável nunca é definida.fonte
Extraído do CodeIgniter:
fonte
é a melhor solução de https ou http:
Mas não pode exibir https ou http, portanto, use apenas para vincular o conteúdo do site, como imagem etc.
se quiser redirecionar seu site em https, adicione este código no arquivo .htaccess:
Mude www.seudominio.com com o seu nome de domínio.
fonte
Aqui está como eu faço isso ... é uma versão abreviada da resposta
if else
de Rid Iculous ...fonte
Eu acho que a função completa deve se parecer com:
Notas:
fonte
Eu sei que estou um pouco atrasado para esta festa, mas se você preferir não usar o $ _SERVER, pois é altamente desencorajado e até desativado em algumas estruturas PHP; e você tem um servidor web apache, pode usar o comando nativo da seguinte forma: -
fonte