8Dle
Авторизация

Защита от прямых ссылок с поддержкой исключений

http://Ваш сайт.ру/go/?http://стороний сайт.ру

Самое радикальное решение борьбы со ссылочным спамом, оставляя кликабельность, это редирект...

Данный хак не только ставит редиректы, но и покрывает ссылки редиректа в noindex и nofollow, таким образом вес Вашей страницы не будет уменьшаться из за ссылок например на ту же рапиду. А самая главная фишка, — поддержка сайтов-исключений (дружественных сайтов) на которые редирект ставится не будет.

Обрабатываются все ссылки, которые проходят через парсер — новости, коменты, профиль и так далее. Ссылки вставленые в шаблон Вами естественно не трогаются.

Xак применяется для новостей, которые добавляются после установки этого хака, а старые новости надо заново открывать для редактирования и сохранять.

Версия Dle: 7.0, 7.3, 7.5, 8.0, 8.2

1. Находим в каталоге engine/classes/parse.class.php.
2. Ищем следующую строчку кода:
if ($this->filter_mode) $txt = $this->word_filter($txt, false);

ниже вставляем:
/*  
Раскодировка сформированного URL-адреса 
*/ 
$txt = preg_replace( "#<!--FFriend--><noindex><a rel=\"nofollow\" href=[\"'](http://|https://|ftp://|ed2k://|news://|magnet:)?(\S.+?)['\"].+?".">(.+?)</a></noindex><!--EndFFriend-->#ie" , "\$this->decode_friend('\\1\\2', '\\3')", $txt );

3. Находим другую строчку:
return "<a href=\"".$url['html']."\" ".$target.">".$show."</a>" . $url['end'];

заменяем ее на:
/*
Формирование URL-адреса 
*/ 
if($this->check_home($url['html'])||$this->check_friends($url['html'])) 
{ 
       return "<a href=\"".$url['html']."\" ".$target.">".$show."</a>" . $url['end']; 
} 
else 
{ 
      $url['html'] = $config['http_home_url']."go/?".($url['html']); 
      return "<!--FFriend--><noindex><a rel=\"nofollow\" href=\"".$url['html']."\" ".$target.">".$show."</a></noindex><!--EndFFriend-->" . $url['end']; 
}

4. Находим следующий код:
function word_filter($source, $encode = true) {

выше него вставляем:
/* 
Функция: "Дружественный URL" 
*/     
function check_friends ($url) 
{ 
    global $config;          
    $friend_url = file($config['http_home_url']."engine/friend/friend_url.txt");       
         
    for ($i = 0; $i < count($friend_url); $i++) 
    {  
        $value = str_replace("http://", "", trim($friend_url[$i])); 
        $value = str_replace("www.", "",    $value); 
        $value = explode('/', $value); 
        $value = reset($value); 
                       
        if ($value == "" ) continue; 
        if (strpos($url, $value) === false) continue; else return true; 
    } 
    return false; 
}

5. Ищем другой код:
return "[leech=".$url."]".$show."[/leech]"; 
}

вставляем ниже:
/* 
Раскодировка сформированного URL-адреса 
*/ 
function decode_friend($url="", $show="") 
{     
    global $config; 
    $home_url = $config['http_home_url']."go/?"; 
         
    $url = str_replace($home_url, "", $url); 
    $url = explode ("url=", $url); 
    $url = end ( $url ); 
    $url = rawurldecode($url); 
         
    return "[url=".$url."]".$show."[/url]"; 
}

6. Следующую строчку можно подредактировать:
$friend_url = file($config['http_home_url']."engine/friend/friend_url.txt");

Здесь мы указывалипуть к текстовому файлу, в котором будут дружественные сайты. Изменяем путь и имя по желанию.

7. Создаем в папке engine подпапку friend, файл friend_url.txt. Не забудьте проверить права на чтение нашей папки и файла с URL. Заполняем файл
friend_url.txt в каждой строке по домену, в формате http://сайт ру/

8. Создаем в корне сайта папку go в ней файл index.php с таким содержимым:
<?php 
if (!empty($_SERVER['QUERY_STRING'])){ 
$re_addr=$_SERVER['QUERY_STRING']; 
header('Location: '.$re_addr); 
} 
?>

9. Там же файл создаем .htaccess и в нем пишем:
DirectoryIndex index.php
RewriteEngine Off

Жмите на Кнопу ниже, или подписывайтесь!


Читайте также
  1. Гор
    16 сентября 2009 21:22
    что то не работает он с ссылками которые в новостях angry


    Новости добавляю свинг редактором ссылки как были так и есть

    fellow проба
  2. Vlad
    20 сентября 2009 14:36
    Блин круто, искал давно!
    Проблема с сайтом? Модуль или хак не работает?
    За $ установлю любой модуль/хак/шаблон.
    Вопросы по DLE - ко мне, не бесплатно.
  3. silwer
    22 сентября 2009 03:24
    а поисковики в баню не отправят? нофолов я понимаю - неа, а за ноиндекс?
  4. ZANOS
    25 сентября 2009 15:12
    а как же с сапой обстоят дела?!? или они тоже будут уходть в ноиндекс ноуфоллоу...
  5. Bahus
    28 сентября 2009 05:29
    9. Там же файл создаем .htaccess и в нем пишем:
    DirectoryIndex index.php
    RewriteEngine Off

    Данный файл создавать не надо. Он уже есть. Только в нем параметр RewriteEngine включен.
    Цитата: ZANOS
    а как же с сапой обстоят дела?!? или они тоже будут уходть в ноиндекс ноуфоллоу...

    Поддержу вопрос. ИМХО тоже будут через редирект.
    Цитата: silwer
    а поисковики в баню не отправят? нофолов я понимаю - неа, а за ноиндекс?

    С какого перепуга? Когда Яндекс за noindex банил?
  6. 8Dle
    28 сентября 2009 10:33
    Bahus,
    Редирект действует ток в новостях . ноинекс итд на сау не ставиться.

    а поисковики в баню не отправят? нофолов я понимаю - неа, а за ноиндекс?

    не.
    Вот Если мног прямых ссылок можно фильтр получить =) Поэтому над скрывать.
    Aлаh аkбap =)
  7. Bahus
    29 сентября 2009 08:25
    E меня не заработал. Работает только морда и админка. Все ссылки на новости и страницы не пашут. Вернул родной файл и в acess снова включил параметр. Все заработало снова.
    Вернул отредактированный файл, но в acess оставил on. Сайт работает. Ссылки показываются через /go? но редиректа не происходит. Грит страница не найдена на сайте. dle 8.2
  8. Jaims
    5 ноября 2009 03:52
    Впервые сталкиваюсь с тем, что у меня что-то не работает, жаль конечно.
    Все ссылки как были открыты, так и остались. DLE 8.2

    P.S. Извиняюсь, все прекрасно работает, понял в чем была проблема :)
  9. max2741
    14 ноября 2009 12:13
    блин мне вылааёт ошибку в этой строке , может не туда вставил, $friend_url = file($config['http_home_url']."engine/friend.txt");
    подсажите куда это вставлять?
  10. asdasdff
    6 января 2010 00:20
    ктонить может выложить уже модифицированный parse.class.php для DLE 8.3? =)
  11. MaGiS
    31 января 2010 23:53
    asdasdff,
    я пропустил только первый пункт и у меня всё пошло на 8.3
  12. SpiriT30
    1 февраля 2010 20:02
    У меня ошибка:
    Fatal error: Call to undefined method ParseFilter::decode_friend() in /home/tradeip/public_html/engine/classes/parse.class.php(348) : regexp code on line 1
    Как раз в той строчке где стоит Раскодировка сформированного URL-адреса
  13. PernatiK
    13 февраля 2010 15:48
    Да под 8.3 не пашет sad
  14. dmitross
    22 апреля 2010 18:23
    Промучился больше часа.... И пришло ко мне счастье wink Автору респект и уважуха. ДЛЕ 8.2
  15. baslik
    31 августа 2010 02:45
    Все пашло=) двигатель 8.5 , все по схеме , тока позновато нашол данный хак( терь новости перебивать...
  16. Cody
    15 сентября 2010 16:52
    У меня на 8.3 все работает winked можете посмотреть http://claf.ru
  17. iambad
    22 сентября 2010 14:32
    parse.class.php:

    Найти:
    function BB_Parse($source, $use_html=TRUE) {
    global $config, $lang;

    Добавить после:
    $source = str_replace(array('[url', 'url]'), array('[leech', 'leech]'), $source);


    Просто во всех новых новостях будет переделывать ссылки в leech
  18. Pavel
    15 февраля 2011 10:38
    Ребята, а на dle 9.2. работает?
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Dle это движок который изначально проектировался для создания новостных сайтов, но по мере своего развития движка значительно расширил свою функциональность и стал универсальным средством разработки и сопровождения сайтов и блогов различной направленности и тематики. По сравнению с другими бесплатными (и некоторыми платными) CMS системами движок dle обладает довольно обширными возможности.

Авторизация