He escrito una pequeña función para establecer el protocolo de URL del sitio actual, pero no tengo SSL y no sé cómo probar si funciona bajo https. ¿Me puede decir si esto es correcto?
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() );
¿Es necesario hacerlo como se indica arriba o solo puedo hacerlo ?:
function siteURL()
{
$protocol = 'http://';
$domainName = $_SERVER['HTTP_HOST'].'/'
return $protocol.$domainName;
}
define( 'SITE_URL', siteURL() );
Bajo SSL, ¿el servidor no convierte automáticamente la url a https incluso si la url de etiqueta de anclaje usa http? ¿Es necesario verificar el protocolo?
¡Gracias!
Respuestas:
No es automatico. Tu función principal se ve bien.
fuente
//mysqite.com
en lugar dehttps://mysitecom
Sé que es tarde, ¡aunque hay una forma mucho más conveniente de resolver este tipo de problema! Las otras soluciones son bastante desordenadas. así es como lo haría:
... o incluso sin condiciones si lo prefieres:
Mira esto
$_SERVER["SERVER_PROTOCOL"]
fuente
stripos
lugar destrpos
?$_SERVER['SERVER_PROTOCOL']
está hecho para almacenarHTTP/1.0
o,HTTP/1.1
según la versión del protocolo, ¿de qué tipo de configuración del servidor HTTP habla, almacenandohttps
información sobre esta cadena que proviene de la consulta http?Esto funciona para mi
fuente
Algunos cambios:
fuente
camino corto
fuente
REQUEST_SCHEME
no es confiableComo probar el número de puerto no es una buena práctica según mi opinión, mi solución es:
La
HTTPS
constante devuelveTRUE
si$_SERVER['HTTPS']
se establece y es igual a "1", "verdadero", "en" o "sí". Devuelve FALSO de lo contrario.fuente
Para cualquier sistema, excepto IIS, esto es suficiente para definir la propia URL del sitio:
o
depende de lo que quieras exactamente: HTTP_HOST vs. SERVER_NAME
fuente
En el caso del proxy, es
SERVER_PORT
posible que no proporcione el valor correcto, así que esto es lo que funcionó para mí:fuente
Use esta variable de servidor para obtener los detalles del protocolo:
Tenga en cuenta que esta variable de servidor no es confiable. Para obtener más información, consulte: ¿Es confiable $ _SERVER ['REQUEST_SCHEME']?
fuente
Sé que esta es una vieja pregunta, pero me encontré con esto hoy ya que necesitaba hacer una prueba en mi sitio. Parece que las respuestas anteriores son innecesariamente complicadas. Para establecer el protocolo del sitio, todo lo que tiene que hacer es probar
$_SERVER['HTTPS']
Si el protocolo está usando HTTPS, entonces
$_SERVER['HTTPS']
regresará 'on'. Si no, la variable permanecerá vacía. Por ejemplo:// 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'];
Puede usar lo anterior para realizar pruebas de HTTPS de manera fácil y limpia e implementarlas en consecuencia. :)
fuente
hizo una función usando la respuesta de Rid Iculous que funcionó en mi sistema.
Espero eso ayude
fuente
He probado la respuesta más votada y no funcionó para mí , terminé usando:
fuente
$_SERVER["HTTPS"]
y, por lo tanto, su código puede volverhttp://
incluso si así fuerahttps://
https
, ¿por qué el código aún volveríahttps
?$_SERVER["HTTPS"]
variable nunca está definida.fuente
Extraído de CodeIgniter:
fuente
es la mejor solución de https o http, use esto:
Pero no puede mostrar https o http, por lo que solo se usa para vincular el contenido de su sitio como imagen, etc.
si desea redirigir su sitio en https, agregue este código en el archivo .htaccess:
Cambie www.your-domain.com con su nombre principal.
fuente
Así es como lo hago ... es una versión abreviada
if else
de la respuesta de Rid Iculous ...fuente
Creo que la función completa debería verse así:
Notas:
fuente
Sé que llego un poco tarde a esta fiesta, pero si prefieres no usar $ _SERVER, ya que se desaconseja e incluso se desactiva en algunos marcos PHP; y tiene un servidor web apache, puede usar su comando nativo de esta manera:
fuente