2009-04-04 13 views
12

Esto es extraño, pero por alguna razón el $_SERVER["SCRIPT_URI"] no devolverá el nombre de dominio cuando estoy en secundario/subpáginas pero solo funcionará en la página principal. No estoy seguro de si se debe a la secuencia de comandos (WordPress) o al host, pero ¿puede sugerir alguna solución confiable para recuperar el nombre de dominio con PHP?

+0

Puede haber estado pensando en '$ _SERVER ['REQUEST_URI']' – Kzqai

+0

@Kzqai 'SCRIPT_URI' está documentado en los documentos de Apache como [una variable de entorno mantenida por mod_rewrite] (http://httpd.apache.org/ docs/2.2/es/mod/mod_rewrite.html # EnvVar) - por lo tanto, debe estar presente en el superglobal '$ _SERVER'. Sin embargo, como el OP ha encontrado, no siempre está configurado (por la razón que sea). – MrWhite

Respuesta

22

Si necesita nombre de dominio, utilice:

$_SERVER['HTTP_HOST'] 
+0

¡Oh, este funcionó bien! incluso con la reescritura de URL en. Gracias –

2

Esto puede ser debido a la reescritura de URL, puede probar $ _SERVER ['REQUEST_URI'] en su lugar si desea la ruta que se llamó en la url.

+0

Si elige este método, tenga en cuenta que puede verse afectado por los encabezados de solicitud. –

+0

De hecho. Hay una nueva redacción. Pero no quiero el camino, solo quiero verificar el nombre de dominio. De todos modos? –

6

Dependiendo de lo que quiere, que haría uso de una de las siguientes:

  1. $ _SERVER [ 'PHP_SELF'] para el script ubicación del archivo
  2. $ _SERVER [ 'SERVER_NAME'] para el nombre de host

From the php docs

EDITAR: Quizás PHP_SELF no es el mejor. Ver comentarios.

+0

Como sé, usar $ _SERVER ['PHP_SELF'] es un riesgo absoluto. http://is.gd/qPcb – sepehr

+1

Probablemente deberías usar '$ _SERVER ['SCRIPT_NAME']' en lugar de PHP_SELF. –

18

En caso de duda

var_dump($_SERVER); 
+0

+1 ¡El mejor consejo! –

0

var_dump($_SERVER) y ver lo adapte a sus necesidades.

P.S. Haciendo uso de $_SERVER["PHP_SELF"] unsanitized podría ser un security risk.

-3

Si su navegador formatea JSON documentos bien y no hay salida ha tenido lugar, insertar el siguiente dará lugar a algo más legible que var_dump:

header('Content-Type: application/json');die(json_encode($_SERVER)); 

phpinfo() también proporcionará una lista de todos los $_SERVER valores y tales ¡mucho más!

0

Además, SCRIPT_URI no existe, la sintaxis correcta es REQUEST_URI:

echo $_SERVER["REQUEST_URI"]; Devuelve toda la ruta sin el host y dominio.

+0

'SCRIPT_URI' no es necesariamente incorrecto. Está documentado en los documentos de Apache como [una variable de entorno mantenida por mod_rewrite] (http://httpd.apache.org/docs/2.2/en/mod/mod_rewrite.html#EnvVar). Sin embargo, como el OP ha encontrado, no siempre está configurado (por la razón que sea). Pero ... cuando está configurado, no es lo mismo que 'REQUEST_URI'. 'SCRIPT_URI' contiene un _absolute URL_, mientras que' REQUEST_URI' es un URL relativo a la raíz ("sin el host y el dominio"). – MrWhite

0

yo estaba utilizando $ _SERVER [SCRIPT_URI] en mi sitio web http://www.a2zidx.com y un número de subdirectorios como http://howto.a2zidx.com

he tenido ningún problema con esto durante años y tiene hoy un error en un número de sitios donde $ _SERVER [SCRIPT_URI] no fue asignado. Después de contactar con mi ISP, afirman que no han realizado ningún cambio, pero $ _SERVER [SCRIPT_URI] ya no funciona. getenv ('SCRIPT_URI') no falla pero devuelve una cadena nula. Por qué esto debería suceder de repente después de tantos años que no sé. Terminé llamando a una función para pasar por varias opciones para extraer el nombre de archivo que es lo que quería. Espero que esto cubra todo. Tenía problemas incluyendo la función, pero comprobé "SCRIPT_NAME" "PHP_SELF" "SCRIPT_FILENAME "SCRIPT_URI"

espero que su ayuda.

Si alguien sabe por qué SCRIPT_URI dejará de funcionar de repente, me gustaría saberlo. El servidor está ejecutando Apache 2.4.

+0

Los enlaces se parecen mucho al correo basura, por favor considere reemplazarlos por otros genéricos como example.com – Norrius

Cuestiones relacionadas