Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

rss

Вы не зашли.

Объявление

#1 2017-03-04 10:48:09

UriyZenkov
Пользователь
Зарегистрирован: 2011-01-13
Сообщений: 257
Рейтинг :   
Профиль  Вебсайт

Продажа ссылок на fluxbb

Хак для скрытия всех внешних ссылок через редирект на Fluxbb
(с возможностью оставить открытой любую необходимую ссылку)

Когда хак будет настроен, все внешние ссылки с сайта, включая ссылки в бб-кодах url, в описаниях профилей и на страницах профилей, будут работать редиректом через файл go.php
Таким образом все внешние ссылки будут иметь следующий вид:

Код:

http://site.ru/go.php?to=http://yandex.ru

Затем данный файл для надежности закрывается от индексации в robots.txt с помощью такой директивы:

Код:

Disallow: go.php

Чтобы иметь возможность оставлять некоторые ссылки открытыми, мы добавим на форум дополнительный бб-код [rurl]. Далее в инструкции в коде в качестве бб-кода будет использоваться rurl, но вы можете использовать любой другой (скажем [refurl231], чтобы защитить свой форум от спамеров, которые возможно набредут на инструкцию по этому хаку. Это маловероятно, но всё же.

Инструкция для Fluxbb 1.5.10:
1) Создаем в корне форума файл с названием go.php и таким содержанием:

Код:

<?php
$to_link = $_GET["to"];
$URL = substr_replace($URL, $to_link, 0);
header ("Location: $URL");
?>

2) Находим в файле /includes/parser.php функцию handle_url_tag, в которой нас интересует вот эта часть:

Код:

return '<a href="'.$full_url.'" rel="nofollow">'.$link.'</a>';

Заменяем её на это, изменив site.ru на ваш домен:

Код:

return '<a href="http://site.ru/go.php?to='.$full_url.'" rel="nofollow">'.$link.'</a>';

Теперь все ссылки в бб-коде url будут идти редиректом через go.php

3) Чтобы иметь возможность оставлять некоторые ссылки прямыми, без редиректов и rel=nofollow, нам нужна точно такая же функция, но которая будет обрабатывать ссылки, скажем, в бб-коде [rurl] и выдавать их напрямую, без подстановки go.php.

Для этого мы полностью копируем функцию handle_url_tag, переименовываем её в handle_rurl_tag, приводим строчку return к такому виду:

Код:

return '<a href="'.$full_url.'">'.$link.'</a>';

А также находим вот этот кусок кода:

Код:

if ($bbcode)
{
    if ($full_url == $link)
        return '[url]'.$link.'[/url]';
    else
        return '[url=.$full_url.]'.$link.'[/url]';
}

И заменяем в нём все url, на rurl. Получится вот так:

Код:

if ($bbcode)
{
    if ($full_url == $link)
        return '[rurl]'.$link.'[/rurl]';
    else
        return '[rurl='.$full_url.']'.$link.'[/rurl]';
}

Вы могли заметить, что помимо отсутствия go.php мы также убрали и rel="nofollow".
Напоминаю, что если вы хотите получить в итоге не [rurl] бб-код для открытых ссылок, а какой-то другой, то начиная с этого момента и далее все rurl вам надо заменять на свой вариант.

В итоге у вас должна получиться вот такая картина:

Код:

function handle_rurl_tag($url, $link = '', $bbcode = false)
{
    $url = pun_trim($url);

    // Deal with [url][img]http://example.com/test.png[/img][/url]
    if (preg_match('%<img src=\"(.*?)\"%', $url, $matches))
        return handle_url_tag($matches[1], $url, $bbcode);

    $full_url = str_replace(array(' ', '\'', '`', '"'), array('%20', '', '', ''), $url);
    if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    if ($bbcode)
    {
        if ($full_url == $link)
            return '[rurl]'.$link.'[/rurl]';
        else
            return '[rurl='.$full_url.']'.$link.'[/rurl]';
    }
    else
    {
        if ($link == '' || $link == $url)
        {
            $url = pun_htmlspecialchars_decode($url);
            $link = utf8_strlen($url) > 55 ? utf8_substr($url, 0 , 39).' … '.utf8_substr($url, -10) : $url;
            $link = pun_htmlspecialchars($link);
        }
        else
            $link = stripslashes($link);

        return '<a href="'.$full_url.'">'.$link.'</a>';
    }
}

Не забываем про замену site.ru на ваш домен.

Необязательное улучшение
Хотите немного сэкономить ресурсы сервера? Для этого можно удалить лишние обработчики неправильного написания ссылок в нашей новой функции.
Убираем из handle_rurl_tag данный кусок кода:

Код:

if (strpos($url, 'www.') === 0) // If it starts with www, we add http://
        $full_url = 'http://'.$full_url;
else if (strpos($url, 'ftp.') === 0) // Else if it starts with ftp, we add ftp://
        $full_url = 'ftp://'.$full_url;
else if (strpos($url, '/') === 0) // Allow for relative URLs that start with a slash
        $full_url = get_base_url(true).$full_url;

и заменяем оставшуюсся

Код:

else if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

на

Код:

if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

В итоге наша функция handle_rurl_tag станет на несколько операций короче и будет выглядеть так:

Код:

function handle_rurl_tag($url, $link = '', $bbcode = false)
{
    $url = pun_trim($url);

    // Deal with [url][img]http://example.com/test.png[/img][/url]
    if (preg_match('%<img src=\"(.*?)\"%', $url, $matches))
        return handle_url_tag($matches[1], $url, $bbcode);

    $full_url = str_replace(array(' ', '\'', '`', '"'), array('%20', '', '', ''), $url);
    if (!preg_match('#^([a-z0-9]{3,6})://#', $url)) // Else if it doesn't start with abcdef://, we add http://
        $full_url = 'http://'.$full_url;

    // Ok, not very pretty :-)
    if ($bbcode)
    {
        if ($full_url == $link)
            return '[rurl]'.$link.'[/rurl]';
        else
            return '[rurl='.$full_url.']'.$link.'[/rurl]';
    }
    else
    {
        if ($link == '' || $link == $url)
        {
            $url = pun_htmlspecialchars_decode($url);
            $link = utf8_strlen($url) > 55 ? utf8_substr($url, 0 , 39).' … '.utf8_substr($url, -10) : $url;
            $link = pun_htmlspecialchars($link);
        }
        else
            $link = stripslashes($link);

        return '<a href="'.$full_url.'">'.$link.'</a>';
    }
}

С такой функцией в тэгах [rurl] ссылки нужно будет обязательно прописывать с http:// в начале. Вот так:

Код:

[rurl=http://yandex.ru]анкор ссылки[/rurl]

Если указать ссылку без http:// - она не будет работать, потому что мы удалили код, отвечающий за преобразование неправильных ссылок без протокола к виду с протоколом: http://site.ru
Зато сэкономили немного серверных ресурсов на будущее.


3) Теперь нам надо связать новую функцию handle_rurl_tag с, собственно, бб-кодом rurl, который нам кстати тоже сперва надо добавить.

Для этого находим в файле /includes/parser.php функцию do_bbcode, а в ней такие строки:

Код:

$pattern_callback[] = '%\[url\]([^\[]*?)\[/url\]%';
$pattern_callback[] = '%\[url=([^\[]+?)\](.*?)\[/url\]%';

Делаем дубль этих двух строк.
Меняем в дублированных строках url на rurl или ваш бб-код.

В итоге получаем такой код:

Код:

$pattern_callback[] = '%\[url\]([^\[]*?)\[/url\]%';
$pattern_callback[] = '%\[url=([^\[]+?)\](.*?)\[/url\]%';
$pattern_callback[] = '%\[rurl\]([^\[]*?)\[/rurl\]%';
$pattern_callback[] = '%\[rurl=([^\[]+?)\](.*?)\[/rurl\]%';

Далее опускаемся ниже и находим такие строки:

Код:

$replace_callback[] = 'handle_url_tag($matches[1])';
$replace_callback[] = 'handle_url_tag($matches[1], $matches[2])';

Поясню подробнее. Данные строки отвечают за то, чтобы бб-код url обрабатывался функцией handle_url_tag.
Наша задача теперь привязать только что созданный [rurl] бб-код к новой функции handle_rurl_tag.
Для этого мы также делаем дубль этих двух строк и заменяем в них handle_url_tag на handle_rurl_tag.

В итоге у нас получится вот это:

Код:

$replace_callback[] = 'handle_url_tag($matches[1])';
$replace_callback[] = 'handle_url_tag($matches[1], $matches[2])';
$replace_callback[] = 'handle_rurl_tag($matches[1])';
$replace_callback[] = 'handle_rurl_tag($matches[1], $matches[2])';

Сохраняем файл на сервере вместо стандартного, заходим на форум и создаём пост с двумя ссылками:
Одну через url бб-код, другую через rurl бб-код. Если вы всё сделали правильно, то обычная ссылка будет идти через редирект, а rurl-ссылка будет прямой и без атрибута rel="nofollow".

4) Осталось дело за малым. Помимо текстов постов, нам надо закрыть ещё и ссылки в описаниях профилей и на страницах профилей.
а) Чтобы такие ссылки в описаниях профилей тоже работали через редирект:
http://libreportal.net/images/img/2017-03/03/9ybnz474gbpret6ojfer89v3w.jpg
Открываем файл /viewtopic.php и заменяем вот эту строку:

Код:

$user_contacts[] = '<span class="website"><a href="'.pun_htmlspecialchars($cur_post['url']).'" rel="nofollow">'.$lang_topic['Website'].'</a></span>';

на это, заменив site.ru на свой домен:

Код:

$user_contacts[] = '<span class="website"><a href="http://site.ru/go.php?to='.pun_htmlspecialchars($cur_post['url']).'" rel="nofollow">'.$lang_topic['Website'].'</a></span>';

б) Чтобы редиректить ссылки со страниц профилей, открываем файл /profile.php и аналогичным образом заменяем это:

Код:

$user_personal[] = '<dd><span class="website"><a href="'.$user['url'].'" rel="nofollow">'.$user['url'].'</a></span></dd>';

на это, заменив site.ru на свой домен:

Код:

$user_personal[] = '<dd><span class="website"><a href="http://site.ru/go.php?to='.$user['url'].'" rel="nofollow">'.$user['url'].'</a></span></dd>';

Инструкция для Fluxbb 1.4

В файле include/parser.php также дублируем функцию function handle_url_tag
и меняем

Код:

{
        if ($full_url == $link)
            return '[url]'.$link.'[/url]';
        else
            return '[url=.$full_url.]'.$link.'[/url]';
    }

на

Код:

{
        if ($full_url == $link)
            return '[rurl]'.$link.'[/rurl]';
        else
            return '[rurl='.$full_url.']'.$link.'[/rurl]';
    }

Добавляем бб-тэг rurl и связываем его с нашей новой функцией. Для этого находим в файле include/parser.php такие строчки:

Код:

$pattern[] = '#\[url\]([^\[]*?)\[/url\]#e';
    $pattern[] = '#\[url=([^\[]+?)\](.*?)\[/url\]#e';

Дублируем их и в продублированных строчках заменяем url на rurl
Далее находим строки:

Код:

$replace[] = 'handle_url_tag(\'$1\')';
    $replace[] = 'handle_url_tag(\'$1\', \'$2\')';

Дублируем их и также заменяем url на rurl

Примеры include/parser.php:
http://libreportal.net/messageboards/fluxbb.html
https://fluxbb.qb7.ru/forum/viewtopic.php?id=3956

Сделал фрилансер Wondersmith

Я потратился на этот код, в знак благодарности можете зарегистрироваться по моей партнёрской ссылке на linkum.ru

Рекламные ссылки с форумов

Отредактированно UriyZenkov (2017-03-04 19:56:06)

Неактивен

 

#2 2017-03-04 13:04:15

irbees2008
Пользователь
Откуда: Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

Re: Продажа ссылок на fluxbb

Красота, но в вроде здесь в форуме почти такое же встроенно wink

Неактивен

 

#3 2017-03-04 19:57:27

UriyZenkov
Пользователь
Зарегистрирован: 2011-01-13
Сообщений: 257
Рейтинг :   
Профиль  Вебсайт

Re: Продажа ссылок на fluxbb

irbees2008 написал:

Красота, но в вроде здесь в форуме почти такое же встроенно wink

рекламки я видел только в футере, а тэг [rurl] можно вставлять в посты и подписи

Неактивен

 

Board footer

Powered by FluxBB

[ Generated in 0.007 seconds, 9 queries executed ]