2012-01-29 11 views
22

Voglio avere una pagina 404 in grado di rilevare se un utente è arrivato a quella pagina tramite il mio sito, tramite il mio URL abbreviato o tramite un altro sito, e lo sto facendo utilizzando PHP. Sto lentamente prendendo confidenza con PHP e potrebbe trattarsi di una semplice domanda, ma sono abbastanza stanco di essere onesto e non ho caffeina nel mio sistema, e sto cercando di legare il più presto possibile a tutti i problemi nel mio portafoglio. .

Ho trovato la variabile PHP $_SERVER['HTTP_REFERER']; mi dà l'intero URL, che è un inizio. C'è un modo in cui questo può darmi solo il dominio radice, tramite un'altra variabile o una funzione, tenendo presente che alcuni referenti potrebbero usare http: // e alcuni https: // (così semplicemente partendo dal settimo carattere sarebbe non sempre funziona)? In questo modo, posso abbinare l'URL basato su due (o più) indirizzi predefiniti e produrre il contenuto relativo a quel dominio.

risposta

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

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

Nota che il referer è terribilmente facile da falsificare, quindi non è affidabile.

+0

Questo è meraviglioso! Funziona perfettamente, a parte il fatto che non posso fare lo stesso con 301 URL reindirizzati, che penso possano causare problemi con il mio URL shortener. Non importa, troverò un modo. –

+0

A proposito, quanto sono facili da falsificare gli URL? Qualcuno potrebbe facilmente rovinare il mio dominio? Come? –

+0

Sto dicendo che il * referer * è facile da falsificare. È solo arbitrario, facoltativo, inviare dati volontari nell'intestazione HTTP della richiesta. Il cliente può inviare tutto ciò che vuole lì. Ci sono plugin del browser che cambieranno il referer in qualsiasi cosa tu voglia. – deceze

0

questo dovrebbe fare:

$_SERVER['SERVER_NAME'] 
+0

Non proprio un'opzione molto buona come se tu usassi un sottodominio come "potato.domain.com" e vuoi ottenere 'domain.com' come risultato, questo fallirà. L'OP ha dichiarato _root domain_ – Cassandra

Problemi correlati