2012-01-29 4 views
22

Я хочу иметь страницу 404, которая может определить, пришел ли пользователь к этой странице через мой сайт, через мой сокращенный URL-адрес или через другой сайт, и я делаю это с помощью PHP. Я медленно подхожу к PHP, и это может быть простым вопросом, но я довольно устал, чтобы быть честным и не иметь кофеина в своей системе, и я хочу как можно скорее связать любые свободные концы в своем портфолио ,

Я нашел переменную PHP $_SERVER['HTTP_REFERER'];, которая дает мне весь URL-адрес, который является началом. Есть ли способ, который может дать мне только корневой домен либо через другую переменную, либо с помощью функции, имея в виду, что некоторые источники могут использовать http: // и некоторые https: // (так что просто начиная с седьмого символа не всегда работают)? Таким образом, я могу сопоставить URL-адрес на основе двух (или более) предопределенных адресов и создавать контент, относящийся к этому домену.

ответ

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

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

Обратите внимание, что референт ужасно легко обмануть, поэтому он вряд ли надежен.

+0

Это замечательно! Это отлично работает, кроме того, что я не могу сделать то же самое с 301 перенаправленными URL-адресами, что, я думаю, может вызвать проблемы с моим URL-адресом. Не важно, я найду способ. –

+0

Кстати, насколько легко URL-адреса обманывать? Может ли кто-то легко подделать мой домен? Как? –

+0

Я говорю * референт * легко подделать. Это просто произвольные, необязательные, добровольные данные, отправляемые в HTTP-заголовок запроса. Клиент может отправлять туда что угодно. Существуют плагины браузера, которые изменят реферирование на все, что вам нравится. – deceze

0

это должно сделать:

$_SERVER['SERVER_NAME'] 
+0

Не очень хороший вариант, как если бы вы использовали подобный поддомен, например 'potato.domain.com', и вы хотите получить' domain.com' в качестве своего результата, это не удастся. ОП установил _root domain_ – Cassandra