Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Перенаправление/блокировка посетителя по рефереру/


Автор: loadcorp 5.6.2012, 00:17
Сразу скажу, что я не кодер, поэтому сильно не пинать, соответственно за помощь отблагодарю деньгами. Кусок кода остался от бывшего кодера, его нужно доделать/переделать:

Код

<?
$referer = getenv("HTTP_REFERER");
$sname="http://сайт_откуда_посетитель.com/";
$w="http://другой_сайт_если_реферер_подошел.com/";
if(strstr($referer,$sname) && $referer!="" && strstr($referer,"count"))
{
 header("Location: ".$w."");
}

include ("оставляем_если_реферер_не_подошел.html");
?>


скрипт грубо говоря должен при совпадении рефа откуда посетитель перенаправить его на другой сайт/страницу, а при не совпадении оставить его на текущей.
у меня не работает, возможно из-за кривизны рук, что мне нужно получить в итоге:
1. возможность указать ни один реф, а много рефов.
2. помимо рефов иметь возможность фильтровать(указывать) и ip, например определенную подсеть отправить на одну страницу, а остальных на другую.
3. чтобы скрипт заработал smile


Сильно не пинайте, админы сильно не ругайте, если запостил не туда:)

Автор: Aliance 5.6.2012, 10:14
Чтобы указывать несколько критериев (реферер, ИП), нужно использовать не строку, а массив строк:
Код

<?php
$referer = getenv("HTTP_REFERER");

$referers = array('http://сайт_откуда_посетитель.ru', 'http://сайт_откуда_посетитель.com', 'http://сайт_откуда_посетитель.net');

$redirect = "http://другой_сайт_если_реферер_подошел.com/";

if ( ! empty($referer) AND in_array($referer, $referers))
{
    header('Location: '.$redirect);
    exit;
}

include_once('оставляем_если_реферер_не_подошел.html');
?>


IP можно получать например с помощью такого кода:
Код

$ip = $_SERVER['REMOTE_ADDR'];

$ips = array('1.1.1.1', '2.2.2.2');

if ( ! empty($ip) AND in_array($ip, $ips))
{
    header('Location: '.$redirect);
    exit;
}

Чтобы учитывать маски нужно писать более сложную логику.

Чтобы скрипт заработал скорее всего нужно знать что за файл .html пытается инклюдится. Скорее всего ошибка там.

Автор: loadcorp 5.6.2012, 14:52
Файл .html совершенно обычный, с обычным текстом, проблема точно не в нем, так как я могу и чистую страницу указать будет тоже самое.

Что касается скрипта работающего по рефереру, тот который ты дал не работает, вроде все правильно сделал, в чем может быть причина?

Что касается скрипта работающего по ip - работает супер, правда теперь нужно иметь возможность указать подсеть, чтобы целый список ip не указывать, а так чтоб через слеш и как там обычно указывают?

Автор: Aliance 6.6.2012, 10:28
Цитата(loadcorp @  5.6.2012,  15:52 Найти цитируемый пост)
Что касается скрипта работающего по рефереру, тот который ты дал не работает, вроде все правильно сделал, в чем может быть причина?

Потому что я не писал ничего нового и не искал ошибок в написанном скрипте, я лишь показал пример использрвания функции in_array() для решения задачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)