2012-01-29 8 views
22

Chcę mieć stronę 404, która może wykryć, czy użytkownik wszedł na tę stronę za pośrednictwem mojej witryny, skróconego adresu URL lub innej strony, i robię to za pomocą PHP. Powoli zaczynam radzić sobie z PHP i to może być proste pytanie, ale jestem dość zmęczony, aby być szczerym i nie mam kofeiny w moim systemie, i chcę jak najszybciej związać wszelkie luźne cele w moim portfolio. .

Znalazłem $_SERVER['HTTP_REFERER']; zmiennej PHP daje mi cały adres URL, który jest początkiem. Czy istnieje sposób, że może to dać mi tylko domenę root, za pośrednictwem innej zmiennej lub funkcji, pamiętając, że niektórzy polecający mogą używać http: // i niektórych https: // (tak po prostu zaczynając od siódmego znaku nie zawsze działa)? W ten sposób mogę dopasować adres URL na podstawie dwóch (lub więcej) predefiniowanych adresów i utworzyć treść związaną z tą domeną.

Odpowiedz

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

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

Pamiętaj jednak, że referer jest fantastycznie łatwy do sfałszowania, więc jest mało wiarygodny.

+0

To wspaniale! Działa to doskonale, pomijając fakt, że nie mogę zrobić tego samego z 301 przekierowanymi adresami URL, co moim zdaniem może spowodować problemy z moim skracającym URL. Nieważne, znajdę sposób. –

+0

Swoją drogą, jak łatwe są podróbki adresów URL? Czy ktoś może łatwo podszyć się pod moją domenę? W jaki sposób? –

+0

Mówię, że * referer * jest łatwy do podszycia. Jest to arbitralne, opcjonalne, dobrowolne przesyłanie danych w nagłówku HTTP żądania. Klient może wysłać wszystko, co chce. Istnieją wtyczki do przeglądarek, które zmieniają odnośnik na cokolwiek chcesz. – deceze

0

powinno to zrobić:

$_SERVER['SERVER_NAME'] 
+0

Niezupełnie dobra opcja, tak jakbyś używał poddomeny takiej jak 'potato.domena.com' i chcesz otrzymywać' domain.com' jako wynik, to się nie powiedzie. OP podał _root domain_ – Cassandra

Powiązane problemy