Чистка реферера (как на нулледе)

Статус
В этой теме нельзя размещать новые ответы.
Не совсем то, но за этот скрипт спасибо:)
Этот скрипт выдирает ссылки с сайта (странички или чего-то ещё) и выводит с помощью цикла:ah:
 
Допустим к скрипту redirect.php обращаются как http://www.nulled.ws/redirect.php?out_url=http://www.alienserver.com/
Тогда, это можно сделать примерно так:
PHP:
<?php
$out_url = $_GET['out_url'];
function get_domain_name($url){
  $result = "";
  if ($url != ""){
    $parts = parse_url($url);
    $host = $parts['host'];
    if (in_array("www", explode(".", $host)))
    {
      $just_domain = explode("www.", $host);
      return $just_domain[1];
    }
    else
    {
      return $host;
    }
  } else {
    return $result;
  }
}
$our_domain = "nulled.ws";
$out_domain = get_domain_name($out_url);
if ($out_domain != $our_domain){
echo ("
	<html>
	  <head>
        <meta http-equiv='Refresh' CONTENT='5; URL=$out_url'>
		<meta http-equiv='content-type' content='text/html; charset=utf-8'>
      </head>
      <body>
	    Вы покидаете nulled.ws. Вы будете перенаправлены на $out_url через 5 секунд
	  </body>
    </html>");
}
else {
echo ("
	<html>
	  <head>
        <meta http-equiv='Refresh' CONTENT='0; URL=$out_url'>
		<meta http-equiv='content-type' content='text/html; charset=utf-8'>
      </head>
	</html>");
}
?>
То есть задача сводится к 4-рём шагам:
1. Получить URL подлежащий обработке
2. Вычленить из него домен
3. Сравнить его со своим доменом
4. Поступить согласно пожеланиям ;)
 
BuzzDD
Я думал у тебя есть база и в нем нужно сделать активные ссылки на внешний источник(сайт)
darkharvxx
А не проще ли просто проверить присутствие имени домена в урл с помощью eregi()

PHP:
if(!empty($link) && !eregi("site.com", $link)){
редирект}
 
2 swer
Есть две причины не юзать eregi().
Во-первых регэкспы чуток тормознее.
Вторая более веская причина - "This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged."
Для просмотра ссылки Войди или Зарегистрируйся
 
1.Тут не используется супер-пупер условия что бы тормозил да и по моим наблюдениям вы использовали кучу проверок условий и парочку ф-ий которые скорее всего медленнее будет eregi().Да и о каких тут скоростях может идти речь когда эту проверку раз (от силы) 20 восползуются.
2.можно использовать preg_match()
PHP:
!preg_match("/site.com/", $link)
, ничего не изменится.

ps пусть каждый поступает так как ему удобнее:)
 
Красивого решения не нашел, немного подскажу - расписывать времени нет...

В конфиге или хедере своей CMS В ПХП напишите ob_start();

Если уже есть - второй раз не нужно...

Далее в футере сделайте $content = ob_get_clean();

Посомотрите что получите в переменной контент (получите содержимое которое пых отдал бы пользователю - теперь не отдаст)

Далее обрабатываете переменную $content на предмет поиска внешек, например как тут

Код:
preg_match_all("/(http:\\/\\/)?([a-z_0-9-.]+\\.[a-z]{2,3}(([ \"'>\r\n\t])|(\\/([^ \"'>\r\n\t]*)?)))/", $contents, $matches);

for($i=0; $i<count($matches); $i++){
if(isset($matches[0][$i])){echo "<a href='link.php?go=".$matches[0][$i]."'>".$matches[0][$i]."</a>";}}

И выводите переменную $content (echo $content;)

Получаете ВСЕ ВНЕШКИ изменятся с <a href='site.ru'></a> на <a href='/script.php?go=site.ru'></a>

P.S> Кому понравился совет - не забываем жмакать спасибо :)
 
Да ладно :)
Всё правильно, главное чтобы задача решалась и хостер на загрузку CPU не ругался, а конкретный код не так уж и принципиален. Решение в общих чертах вроде найдено.
 
darkharvxx, скрипт тот не работает, он сразу пишет в самом верху статьи, что будет сделан редирект и редиректит на ту же страницу, проверял с утра скрипт тот:)
Далее в футере сделайте $content = ob_get_clean();
Футера нету.
Примерный скрипт уже представил, сегодня или завтра напишу, сейчас нету времени:(
 
BuzzDD
Так не работает или всё-таки редиректит?
Он так и должен делать :) Это всего лишь пример.
Объедени всё что тут писали swer, Atec и я, допили напильником и получишь то что хотел.
Возьму на себя смелость предположить, что Atec не настаивал именно на футерах и буферизации вывода.
С его поправкой схема может выглядеть так:
1. На стадии формирования страницы, динамической или для кэша, вычленяем ссылки на другие домены.
Т.е. делаем из http://www.alienserver.com/blahblahblah, ссылку вида http://www.nulled.ws/redirect.php?out_url=http://www.alienserver.com/blahblahblah.
Ссылки на наш домен оставляем прежними.
Как парсить URL на предмет домена swer и я уже писали.
2. redirect.php тогда становится ещё проще :ah:
PHP:
$out_url = $_GET['out_url'];
echo (" 
    <html> 
      <head> 
        <meta http-equiv='Refresh' CONTENT='5; URL=$out_url'> 
        <meta http-equiv='content-type' content='text/html; charset=utf-8'> 
      </head> 
      <body> 
        Вы покидаете nulled.ws. Вы будете перенаправлены на $out_url через 5 секунд 
      </body> 
    </html>");
Дерзай, у тебя всё получится! :ay:
Повторюсь ещё раз, всё предложенное мной не есть готовое решение. Это всего лишь пример. Конкретная реализация остаётся на тебе.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху