Вопрос про фильтрацию траффа по доменам

L
На сайте с 21.03.2007
Offline
52
402

Возникла такая проблема

Нужно что б весь трафф, идущий на site1 редиректился на site2 и site3 по следующиму принципу:

Все, кто приходят с доменов, находящихся в text1.txt (их много, поэтому реализация через .htaccess не канает пробывал ) редиректились на site2

все остальные на site3

спасибо большое за помощь

[Удален]
#1

попробуй так

<?

preg_match("#(http|https)://(www\\.){0,1}([^/]+)/#ism",$_SERVER['HTTP_REFERER'],$domain);

$domain = $domain[1];

$domains = file("domains.txt");

$domains = array_map("trim",$domains);

if($domain && array_search($domain,$domains)!==false)

{

header("Location: http://site2.ru");

die();

}

else

{

header("Location: http://site3.ru");

die();

}

L
На сайте с 21.03.2007
Offline
52
#2
bearman:
попробуй так

<?
preg_match("#(http|https)://(www\\.){0,1}([^/]+)/#ism",$_SERVER['HTTP_REFERER'],$domain);
$domain = $domain[1];

$domains = file("domains.txt");
$domains = array_map("trim",$domains);

if($domain && array_search($domain,$domains)!==false)
{
header("Location: http://site2.ru");
die();
}
else
{
header("Location: http://site3.ru");
die();
}

ты еще забыл поставить в конце ?> видимо ?

вообщем попробывал - что-то не работает

создал файл domains.txt как у тебя написано вписал туда домен

захожу с него на домен, на котором данный код-а он никуда не ведет вообще

белый экран:(

[Удален]
#3

<?

preg_match("#(http|https)://(www\\.){0,1}([^/]+)/#ism",$_SERVER['HTTP_REFERER'],$domain);

$domain = $domain[1];

$domains = file("domains.txt");

$domains = array_map("trim",$domains);

if($domain && array_search($domain,$domains)!==false)

{

header("Location: http://site2.ru");

die();

}

else

{

header("Location: http://site3.ru");

die();

}

?>

у меня все прекрасно сработало :)

специально проверил.

Progr@mmer\.
На сайте с 14.10.2007
Offline
44
#4

Вроде не правильно то, что используется $domain[1], a нужно $domain[2].

Progr@mmer\. добавил 11.07.2008 в 14:07

И ещё домены в domains.txt нужно записывать в формате:

site.ru

site1.ru

Вашей девушке не хватает романтики? Черпните её на сайте «Я Люблю Романтику» (http://iloveromantics.ru/). Романтический форум (http://forum.iloveromantics.ru/) для отдыха от нудной работы.
[Удален]
#5

ах бле, спасибо программер, просто правило для ввв после всего кода, и забыл поменять :(

<?

preg_match("#(?:http|https)://(www\\.){0,1}([^/]+)/#ism",$_SERVER['HTTP_REFERER'],$domain);

$domain = $domain[1];

$domains = file("domains.txt");

$domains = array_map("trim",$domains);

if($domain && array_search($domain,$domains)!==false)

{

header("Location: http://site2.ru");

die();

}

else

{

header("Location: http://site3.ru");

die();

}

?>

ну и домены по одному на строку

LA
На сайте с 03.06.2008
Offline
105
#6
bearman:
прогерграммер

во обласкал :D

[Удален]
#7

(:fixed :)

LA
На сайте с 03.06.2008
Offline
105
#8
bearman:
preg_match("#(?:http|https)://(www\\.){0,1}([^/]+)/#ism",$_SERVER['HTTP_REFERER'],$domain);

ню-ню..

а если там нет слеша в конце?

Имхо, тут делать так надо:


// preg_match("#(?:http|https)://(www\\.){0,1}([^/]+)/#ism",$_SERVER['HTTP_REFERER'],$domain);
// $domain = $domain[1];
// меняем на следующее

$domain = str_replace(array('http://', 'https://', 'www.'), '', strtolower($_SERVER['HTTP_REFERER']));
if (($slash = strpos($domain, '/')) !== FALSE) {
$domain = substr($domain, 0, $slash);
}

lord_alfred добавил 11.07.2008 в 15:43

Progr@mmer.:
Вроде не правильно то, что используется $domain[1], a нужно $domain[2].

+1. Ты прав:


preg_match("#(?:http|https)://(www\\.){0,1}([^/]+)/#ism",'http://Yandex.ru/',$domain);
print_r($domain);
exit;

Array
(
[0] => http://Yandex.ru/
[1] =>
[2] => Yandex.ru
)

[Удален]
#9

а бывает ли такое что там нет слеша ? ))

на самом деле я бы сказал что и не так надо делать, а через parse_str ;)

но меня обломало писать через эту функцию. а слешь там есть всегда! по крайней мере я так думаю, но могу, конечно ошибаться

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий