2012-01-29 21 views
22

Quiero tener una página 404 que pueda detectar si un usuario ha llegado a esa página, ya sea a través de mi sitio, a través de mi URL acortada o a través de otro sitio, y lo hago usando PHP. Poco a poco me estoy familiarizando con PHP, y esta puede ser una pregunta simple, pero estoy bastante cansado de ser honesto y no tengo cafeína en mi sistema, y ​​quiero atar cualquier cabos sueltos de mi cartera lo antes posible. .

He encontrado la variable de PHP $_SERVER['HTTP_REFERER']; me da la URL completa, que es un comienzo. ¿Hay alguna forma de que esto me brinde solo el dominio raíz, ya sea a través de otra variable o una función, teniendo en cuenta que algunos referentes pueden estar usando http: // y algunos https: // (por lo que simplemente comenzar desde el séptimo carácter sería no siempre funciona)? De esta forma, puedo hacer coincidir la URL en función de dos (o más) direcciones predefinidas y producir el contenido relacionado con ese dominio.

Respuesta

37
parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) 

Ver http://php.net/manual/en/function.parse-url.php.

Tenga en cuenta que el referer es terriblemente fácil de falsificar, por lo que no es confiable.

+0

Eso es maravilloso! Eso funciona perfectamente, aparte del hecho de que no puedo hacer lo mismo con 301 URL redirigidas, que creo que pueden causar problemas con mi acortador de URL. No importa, voy a encontrar un camino. –

+0

Por cierto, ¿qué tan fáciles son las URL para suplantar? ¿Podría alguien burlar fácilmente mi dominio? ¿Cómo? –

+0

Estoy diciendo que * referer * es fácil de falsificar. Es solo el envío arbitrario, opcional y voluntario de datos en el encabezado HTTP de la solicitud. El cliente puede enviar lo que quiera allí. Hay complementos de navegador que cambiarán el referer a cualquier cosa que desee. – deceze

0

esto debe hacer:

$_SERVER['SERVER_NAME'] 
+0

No es realmente una muy buena opción, ya que si usas un subdominio como 'potato.domain.com' y quieres obtener' domain.com' como resultado, esto fallará. El OP hizo estado _root domain_ – Cassandra

Cuestiones relacionadas