Utilizo este código para obtener la URL completa:
$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
El problema es que uso algunas máscaras en mi .htaccess
, así que lo que vemos en la URL no siempre es la ruta real del archivo.
Lo que necesito es obtener la URL, lo que está escrito en la URL, nada más y nada menos: la URL completa.
Necesito saber cómo aparece en la barra de navegación en el navegador web, y no la ruta real del archivo en el servidor.
Respuestas:
Echar un vistazo
$_SERVER['REQUEST_URI']
, es decir(Tenga en cuenta que la sintaxis de cadena entre comillas dobles es perfectamente correcta )
Si desea admitir tanto HTTP como HTTPS, puede usar
Nota del editor: el uso de este código tiene implicaciones de seguridad . El cliente puede establecer HTTP_HOST y REQUEST_URI en cualquier valor arbitrario que desee.
fuente
'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://' . "{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}"
Versión corta al enlace de salida en una página web
Aquí hay más detalles sobre los problemas y los casos límite del formato //example.com/path/
Versión completa
Esta es una versión muy modificada de
http://snipplr.com/view.php?codeview&id=2734
.Estructura de URL:
esquema: // nombre de usuario: contraseña @dominio: puerto / ruta? query_string # fragment_id
Las partes en negrita no serán incluidas por la función
Notas:
username:password
desde una URL completa o el fragmento (hash).#fragment_id
cliente (navegador) no lo envía al servidor y no se agregará a la URL completa.$_GET
solo contendráfoo=bar2
para una URL como/example?foo=bar1&foo=bar2
.$_SERVER['REQUEST_URI']
y devolverán/example?foo=bar2
una URL como/example?foo=bar1&foo=bar2
, use$_SERVER['QUERY_STRING']
en este caso.URL + URN
, pero debido al uso popular, URL ahora significa URI y URL.HTTP_X_FORWARDED_HOST
si no planea usar proxies o balanceadores.Host
encabezado debe contener el número de puerto a menos que sea el número predeterminado.Variables controladas por el cliente (navegador):
$_SERVER['REQUEST_URI']
. El navegador codifica los caracteres no compatibles antes de enviarlos.$_SERVER['HTTP_HOST']
y no siempre está disponible según los comentarios en el manual de PHP: http://php.net/manual/en/reserved.variables.php$_SERVER['HTTP_X_FORWARDED_HOST']
se establece por los equilibradores y no se menciona en la lista de$_SERVER
variables en el manual de PHP.Variables controladas por el servidor:
$_SERVER['HTTPS']
. El cliente elige usar esto, pero el servidor devuelve el valor real de vacío o "encendido".$_SERVER['SERVER_PORT']
. El servidor solo acepta números permitidos como puertos.$_SERVER['SERVER_PROTOCOL']
. El servidor solo acepta ciertos protocolos.$_SERVER['SERVER_NAME']
. Se configura manualmente en la configuración del servidor y no está disponible para IPv6 según kralyk .Relacionado:
HTTP_HOST vs. SERVER_NAME
¿Se requiere el número de puerto en el parámetro de encabezado "Host" de HTTP?
https://stackoverflow.com/a/28049503/175071
fuente
$_SERVER['REQUEST_URI']
se mostrará/example?foo=bar2
para url como/example?foo=bar1&foo=bar2
Host
encabezado, no lo he visto así, gracias por mencionarlo, lo agregará como un ajusteEjemplos para:
https://(www.)example.com/subFolder/myfile.php?var=blabla#555
Aviso ! ! !
#
partes de hashtag se usaron manualmente en el ejemplo anterior solo con fines ilustrativos, sin embargo, los idiomas del lado del servidor (incluidophp
) no pueden detectarlas de forma nativa (solo Javascript puede hacerlo, ya que el hashtag es solobrowser/client side
funcionalidad).DIRECTORY_SEPARATOR
devuelve\
para alojamiento de tipo Windows, en lugar de/
.Para WordPress
fuente
Aquí hay una solución que usa una declaración ternaria , manteniendo el código mínimo:
Esta es la forma más pequeña y fácil de hacer esto, suponiendo que el servidor web esté usando el puerto estándar 443 para HTTPS .
fuente
$_SERVER["HTTPS"] == "on"
para verificar si SSL está activado.Mi método multiplataforma favorito para encontrar la URL actual es:
fuente
Simplemente use:
fuente
http://example.com
:8080
/request.php
y fallar Estas respuestas son complicadas por una razón.Nota: Acabo de actualizar el código de Timo Huovinen , por lo que no obtendrá ningún parámetro GET en la URL. Esta URL es simple y elimina cosas como
?hi=i&am=a&get
.Ejemplo:
se mostrará como:
Esto está bien a menos que use parámetros GET para definir un contenido específico, ¡en cuyo caso debe usar su código! :-)
fuente
Código claro, trabajando en todos los servidores web (Apache, nginx, IIS, ...):
fuente
Aquí está mi solución: el código está inspirado en Tracy Debugger . Fue cambiado para soportar diferentes puertos del servidor. Puede obtener la URL actual completa, incluida
$_SERVER['REQUEST_URI']
o solo la URL básica del servidor. Comprueba mi función:Aquí está el código de prueba:
fuente
http_build_url
requiere la instalación de pecl_httpUtilizar:
Si desea admitir tanto HTTP como HTTPS:
fuente
La misma técnica que la respuesta aceptada, pero con soporte HTTPS , y más legible:
fuente
He hecho esta función para manejar la URL:
fuente
Use esta línea para encontrar la URL de la carpeta principal (si no tiene acceso a http_build_url () que viene junto con pecl_http):
fuente
Esto es bastante fácil de hacer con las variables de entorno de Apache. Esto solo funciona con Apache 2, que supongo que está utilizando.
Simplemente use el siguiente código PHP:
fuente
Prueba esto:
$_SERVER
es una matriz que contiene información como encabezados, rutas y ubicaciones de script. Las entradas en esta matriz son creadas por el servidor web. No hay garantía de que cada servidor web proporcione ninguno de estos; los servidores pueden omitir algunos o proporcionar otros que no figuran aquí. Dicho esto, una gran cantidad de estas variables se tienen en cuenta en la especificación »CGI / 1.1, por lo que debería poder esperarlas.$HTTP_SERVER_VARS
contiene la misma información inicial, pero no es un superglobal. (Tenga en cuenta que$HTTP_SERVER_VARS
y$_SERVER
son variables diferentes y que PHP las maneja como tal)fuente
Puede usar http_build_url sin argumentos para obtener la URL completa de la página actual:
fuente
Hice esta clase para manejar mis URI
¡Por supuesto que tiene que adaptarlo a sus necesidades y sistema!
Todavía necesita ser perfeccionado pero es una solución divina para un sistema URI centralizado: D
fuente
Esta es la solución para su problema:
fuente
Usé esta declaración.
Espero que esto ayude.
fuente
fuente
He usado el siguiente código, y está funcionando bien para mí, para ambos casos, HTTP y HTTPS.
Manifestación
fuente
$_SERVER['HTTPS'] = 'off'
activará la ruta HTTPS. Eso no parece correcto. Por otro lado, tampoco creo que la lógica original fuera correcta.fuente
Aquí está la base de una versión más segura de la respuesta aceptada, utilizando la función filter_input de PHP , que también compensa la posible falta de
$_SERVER['REQUEST_URI']
:Podrías usar algunos filtros diferentes para ajustarlo a tu gusto.
fuente
Puede utilizar
HTTP_ORIGIN
como se ilustra en el fragmento a continuación:fuente
Uso muy simple:
fuente
Creo que este método es bueno ... pruébalo
fuente
Esto funciona tanto para HTTP como HTTPS.
Salida algo como esto.
fuente
Para más información: Cómo obtener la URL completa de una página usando PHP
fuente