Закрытие/редирект внешних ссылок

  • Автор темы Ночная странница
  • 15915
  • Обновлено
  • 18, Mar 2012
  • #1
Наверное, вы обратили внимание, как на этом форуме выглядят все внешние ссылки? При наведении на них мышкой появляется надпись "Внешняя ссылка, реферер не передается..." Эта темка посвящена тому, как сделать то же самое у вас на форуме.

Поисковики перестанут видеть внешние ссылки, для них это будет просто тег

Примечание: требуется редактирование исходных файлов движка.

Порядок действий:

1) Скачиваем хак.

2) Редактируем на сервере файл includes/class_bbcode.php, на всякий случай предварительно сохранив исходную (неизменённую) копию. Текст замены одной из функций (а не всего файла, обратите внимание!) приведен в файле external_links данного архива. 3) Импортируем продукт в нужной кодировке. 4) В шаблоне headinclude нужного стиля в самом низу добавляем скрипт:
 <script type="text/javascript">

<!--

function open_external(url, id)

{

w = window.open('about:blank', id);

w.document.write('<meta http-equiv="refresh" content="0;url='+url+'">');

w.document.close();

return false;

}

-->

</script>
5) Смотрим на форуме - изменились внешние ссылки или нет.

Если нет, то переходим в phpmyAdmin и выполняем запрос к базе данных:
 TRUNCATE TABLE postparsed 
Если у вашей базы данных есть префикс у таблиц (можно посмотреть в списке таблиц) то добавляем его перед названием данной таблицы:
 TRUNCATE TABLE префикс_postparsed 


После этого убедимся, что запрос выполнен (об этом будет сообщение SQL-запрос был успешно выполнен) и любуемся на новый вид внешних ссылок.

(Если и это не помогло, в админке - "обслуживание" перестраиваем кеш сообщений).

Настройки продукта находятся в настройках bb-кодов, и там, собственно, всего один пункт: В этом пункте вы можете указать домены, которые не будут открываться яваскриптом.

По умолчанию в форме указаны сайты техподдержки.

Обратите внимание: хак работает только со ссылками, заключенными в тег bb-кода URL, включите в настройках пункт "Автоматически вставлять ссылки". Примечание: браузер Опера реферер всё же передает. Проверила данный хак на своём форуме - работает.
Скрытая информация :: Авторизуйтесь для просмотра »

Ночная странница


Рег
30 Jan, 2012

Тем
98

Постов
1642

Баллов
2622
  • 18, Mar 2012
  • #2
Добавлю, что требуется редактирование исходных файлов движка. Если будете менять линейку, или обновлять версию, то работать перестанет. Ну и разработчик Kerk с vbsupport.org
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 20, Mar 2012
  • #3
Спасибо. Ссылки стали черного, а не синего цвета при наводе на них курсора выскакивает сообщение: "Внешняя ссылка, реферер не передается." Как понимаю выполнил рекомендации правильно? Еще раз спасибо.
 

Аркадий 10


Рег
06 Jan, 2012

Тем
32

Постов
404

Баллов
724
  • 20, Mar 2012
  • #4
Аркадий:
Ссылки стали черного, а не синего цвета при наводе на них курсора выскакивает сообщение:
"Внешняя ссылка, реферер не передается."
Да, всё верно
 

Ночная странница


Рег
30 Jan, 2012

Тем
98

Постов
1642

Баллов
2622
  • 06, Aug 2012
  • #5
Всё установил по инструкции. Ссылки все изменились как и положено. Но при нажатии на ссылку она не открывается. Помогите.
 

Dmi Try


Рег
20 Jun, 2012

Тем
3

Постов
18

Баллов
48
  • 06, Aug 2012
  • #6
Veter:
А что происходит при нажатии на ссылку?
Ничего не происходит.
 

Dmi Try


Рег
20 Jun, 2012

Тем
3

Постов
18

Баллов
48
  • 06, Aug 2012
  • #7
Проверьте еще раз все ли точно вы выполнили по инструкции, затем сделайте запрос к БД, что в инструкции, и попробуйте очистить кэш и перестроить информацию о темах в админке.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 06, Aug 2012
  • #8
Да я уже раз пять проверял. Ничего. Когда наводишь курсор, то вылазит это "Внешняя ссылка, реферер не передается." А при нажатии ничего. Может проблема с ява-скриптом?
 

Dmi Try


Рег
20 Jun, 2012

Тем
3

Постов
18

Баллов
48
  • 06, Aug 2012
  • #9
Кэш очищали? Информацию о темах перестраивали? Дайте ссылку посмотреть.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 06, Aug 2012
  • #12
Ну значит начинайте сначала:
редактируем файл includes/class_bbcode.php
ищем там функцию function handle_bbcode_url($text, $link)
Функцию правильно нашли? Исходный файл сохранили я надеюсь? Открываете заново исходник, ищете:
 	function handle_bbcode_url($text, $link)

{

$rightlink = trim($link);

if (empty($rightlink))

{

// no option -- use param

$rightlink = trim($text);

}

$rightlink = str_replace(array('`', '"', "'", '['), array('`', '"', ''', '['), $this->strip_smilies($rightlink));

// remove double spaces -- fixes issues with wordwrap

$rightlink = str_replace(' ', '', $rightlink);

if (!preg_match('#^[a-z0-9]+(?<!about|javascript|vbscript|data):#si', $rightlink))

{

$rightlink = "http://$rightlink";

}

if (!trim($link) OR str_replace(' ', '', $text) == $rightlink)

{

$tmp = unhtmlspecialchars($rightlink);

if (vbstrlen($tmp) > 55 AND $this->is_wysiwyg() == false)

{

$text = htmlspecialchars_uni(vbchop($tmp, 36) . '...' . substr($tmp, -14));

}

else

{

// under the 55 chars length, don't wordwrap this

$text = str_replace(' ', '', $text);

}

}

// standard URL hyperlink

return "<a href=\"$rightlink\" target=\"_blank\">$text</a>";

}
Меняете на:
  function handle_bbcode_url($text, $link)

{

$rightlink = trim($link);

if (empty($rightlink))

{

// no option -- use param

$rightlink = trim($text);

}

$rightlink = str_replace(array('`', '"', "'", '['), array('`', '"', ''', '['), $this->strip_smilies($rightlink));

// remove double spaces -- fixes issues with wordwrap

$rightlink = str_replace(' ', '', $rightlink);

if (!preg_match('#^[a-z0-9]+(?<!about|javascript|vbscript|data):#si', $rightlink))

{

$rightlink = "http://$rightlink";

}

if (!trim($link) OR str_replace(' ', '', $text) == $rightlink)

{

$tmp = unhtmlspecialchars($rightlink);

if (vbstrlen($tmp) > 55 AND $this->is_wysiwyg() == false)

{

$text = htmlspecialchars_uni(vbchop($tmp, 36) . '...' . substr($tmp, -14));

}

else

{

// under the 55 chars length, don't wordwrap this

$text = str_replace(' ', '', $text);

}

}

static $current_url, $current_host, $allowed;

$is_external = true;

if (!isset($current_url))

{

$current_url = @parse_url($this->registry->options['bburl']);

$current_host = preg_replace('#:(\d)+$#', '', $current_url['host']);

$allowed = preg_split('#\s+#', $this->registry->options['kr_external_links_whitelist'], -1, PREG_SPLIT_NO_EMPTY);

$allowed[] = preg_replace('#^www\.#i', '', $current_host);

$allowed[] = preg_replace('#^www\.#i', '', $current_url['host']);

}

$target_url = preg_replace('#^([a-z0-9]+:(//)?)#', '', $rightlink);

foreach ($allowed AS $host)

{

if (stripos($target_url, $host) !== false)

{

$is_external = false;

}

}

// standard URL hyperlink

if(!$is_external)

{

return "<a href=\"$rightlink\" target=\"_blank\">$text</a>";

}else{

global $vbphrase;

$phrase_noref = construct_phrase($vbphrase['kr_external_links'], $rightlink);

$uniqid = substr(md5(uniqid(rand(), true)), 0, 10);

return "<span id=\"extlink_" . $uniqid . "\" title=\"" . $phrase_noref . "\" style=\"text-decoration:underline; cursor: pointer;\" onclick=\"return open_external('$rightlink', this.id);\">$text</span>";

}

}
Могли вполне заменить или часть кода, или другой код... Продукт импортировали? В шаблон headinclude код добавили в самый низ?
 <script type="text/javascript">

<!--

function open_external(url, id)

{

w = window.open('about:blank', id);

w.document.write('<meta http-equiv="refresh" content="0;url='+url+'">');

w.document.close();

return false;

}

-->

</script>
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 06, Aug 2012
  • #13
Всё именно так и делал. А вот это что означает? внизу фотографии.
 

Dmi Try


Рег
20 Jun, 2012

Тем
3

Постов
18

Баллов
48
  • 06, Aug 2012
  • #14
А это означает, что
Veter:
В шаблон headinclude код добавили в самый низ?
И скорее всего не добавили.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 06, Aug 2012
  • #15
Спасибо разобрался.)) Я этот скрипт всунул в headinclude основного стиля, а нужно было в обычный стиль.
 

Dmi Try


Рег
20 Jun, 2012

Тем
3

Постов
18

Баллов
48
  • 06, Aug 2012
  • #16
Ну бывает... самая главная ошибка у всех это невнимательность
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 21, Oct 2012
  • #17
Veter:
Продукт импортировали?

В шаблон headinclude код добавили в самый низ?
Что за продукт? Откуда и куда его импортировать? Шаблон headinclude где расположен?
 

Автоспец


Рег
12 Sep, 2012

Тем
6

Постов
92

Баллов
152
  • 21, Oct 2012
  • #18
Продукт в первом посте темы. Во вложении. Порядок установки также описан в первом посте.
Автоспец:
Откуда и куда его импортировать?
Админка, продукты и модули, управление продуктами, Добавить/импортировать продукт
Автоспец:
Шаблон headinclude где расположен?
Админка, стили и шаблоны, управление стилями, редактировать шаблоны, в списке находите нужный.
Автоспец, изучайте админку. VB очень мощный движок, но вполне доступный и логичный.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 22, Apr 2013
  • #19
Ничего у меня не получается! :mad1: Как исправляю
Ночная:
includes/class_bbcode.php,
так у меня не загружаются темы. Вот как в документе:
* @return string HTML representation of the tag.
*/
function handle_bbcode_url($text, $link)
{
$rightlink = trim($link);
if (empty($rightlink))
{
// no option -- use param
$rightlink = trim($text);
}
$rightlink = str_replace(array('`', '"', "'", '['), array('`', '"', ''', '['), $this->strip_smilies($rightlink));

// remove double spaces -- fixes issues with wordwrap
$rightlink = str_replace(' ', '', $rightlink);

if (!preg_match('#^[a-z0-9]+(?<!about|javascript|vbscript|data):#si', $rightlink))
{
$rightlink = "http://$rightlink";
}

if (!trim($link) OR str_replace(' ', '', $text) == $rightlink)
{
$tmp = unhtmlspecialchars($rightlink);
if (vbstrlen($tmp) > 55 AND $this->is_wysiwyg() == false)
{
$text = htmlspecialchars_uni(vbchop($tmp, 36) . '...' . substr($tmp, -14));
}
else
{
// under the 55 chars length, don't wordwrap this
$text = str_replace(' ', '', $text);
}
}
static $current_url, $current_host, $allowed;
$is_external = true;
if (!isset($current_url))
{
$current_url = @parse_url($this->registry->options['bburl']);
$current_host = preg_replace('#



\d)+$#', '', $current_url['host']);

$allowed = preg_split('#\s+#', $this->registry->options['kr_external_links_whitelist'], -1, PREG_SPLIT_NO_EMPTY);
$allowed[] = preg_replace('#^www\.#i', '', $current_host);
$allowed[] = preg_replace('#^www\.#i', '', $current_url['host']);
}
$target_url = preg_replace('#^([a-z0-9]+



//)?)#', '', $rightlink);
foreach ($allowed AS $host)
{
if (stripos($target_url, $host) !== false)
{
$is_external = false;
}
}
// standard URL hyperlink
if(!$is_external)
{
return "<a href=\"$rightlink\" target=\"_blank\">$text</a>";
}else{
global $vbphrase;
$phrase_noref = construct_phrase($vbphrase['kr_external_links'], $rightlink);
$uniqid = substr(md5(uniqid(rand(), true)), 0, 10);
return "<span id=\"extlink_" . $uniqid . "\" title=\"" . $phrase_noref . "\" style=\"text-decoration:underline; cursor: pointer;\" onclick=\"return open_external('$rightlink', this.id);\">$text</span>";
}
Добавлено через 34 секунды Ой,смайлики...ardon:
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 22, Apr 2013
  • #20
Скачайте ваш файл class_bbcode.php, запакуйте и выложите здесь. Исходник разумеется.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 22, Apr 2013
  • #22
Veter:
Пробуйте земенить ваш файл вот этим.
Исходник сохраните естественно.
Заменила. Темы открываются. Но ссылки не изменились. Вот это надо теперь сделать:
Ночная:
5) Смотрим на форуме - изменились внешние ссылки или нет. Если нет, то переходим в phpmyAdmin и выполняем запрос к базе данных:
На хостинге?
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 22, Apr 2013
  • #23
Продукт импортировали? В шалон headinclude вашего стиля вставили скрипт? Очистите кэш. В БД обычно не требуется лезть
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 22, Apr 2013
  • #24
Veter:
Продукт импортировали?
В шалон headinclude вашего стиля вставили скрипт?
Очистите кэш.
Все сделала. Эффекта 0.
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 22, Apr 2013
  • #25
Ну попробуйте ответить там в какой-нибудь теме со ссылкой. Посмотрите эффект.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 22, Apr 2013
  • #26
Veter:
Ну попробуйте ответить там в какой-нибудь теме со ссылкой. Посмотрите эффект.
Ссылки изменили цвет. При наведении появляется окно,но там "крокозябли".
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 23, Apr 2013
  • #28
Veter:
Вы наверное продукт не в той кодировке поставили...
Я пробовала и то,и то. Даже уже запуталась,что последние импортировала. В итоге новые ссылки проходят как нужно,а старые с каля-маля.
http://www.istradeti.ru/forum/showpost.php?p=8166 &amp; postcount=1097
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 23, Apr 2013
  • #29
Ну если новые как нужно, тогда все в порядке с хаком. А вот если старые крокозябрами, то наверное у вас тоже проблемы с кодировкой БД...
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 24, Apr 2013
  • #30
Veter:
то наверное у вас тоже проблемы с кодировкой БД...
Проверяла в разделе post русские буквы.ardon:
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 24, Apr 2013
  • #31
Ну тогда на старых может быть кэш, если вы пробовали ставить хак с разной кодировкой... Думаю, что ничего страшного.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 25, Apr 2013
  • #32
Veter:
Думаю, что ничего страшного.
Главное ссылки закрыли.
 

джинася


Рег
13 Mar, 2012

Тем
25

Постов
385

Баллов
635
  • 10, Oct 2013
  • #33
Поясните новичку пожалуйста, я правильно понимаю, что если поставлю этот хак, то поисковики меня не накажут за неактуальные или левые ссылки, размещенные пользователями на форуме?
 

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 10, Oct 2013
  • #34
Спасибо пользуясь инструкцией и комментариями в теме, установил хак. Поначалу ничего не изменилось, но перечитав тему, попробовал написать сообщение и выложил новую ссылку. Хак заработал.
 

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 28, Oct 2013
  • #35
Здравствуйте.

Посоветуйте пожалуйста, как закрыть от индексации ссылки и картинки с др сайтов.

Хак не предлагать - я его прикрутить не могу (раз 5 пробовал). Может какой скрипт поставить? Мне нужно только форум закрыть от индесации ссылок, а не весь сайт целиком.

Будет ли картинка, загруженная с др. сайта, считаться ссылкой и передавать вес?
 

Автоспец


Рег
12 Sep, 2012

Тем
6

Постов
92

Баллов
152
  • 28, Oct 2013
  • #36
Автоспец:
Будет ли картинка, загруженная с др. сайта, считаться ссылкой и передавать вес?
Если речь о тэге IMG, то нет.
Автоспец:
Хак не предлагать - я его прикрутить не могу (раз 5 пробовал)
Речь об этом хаке? Хм... а что там сложного? Есть еще хак https://lumtu.com/haki-vbulletin/2499-hak-skrytiya-ssylok-ot-gostei-hide-links-guest.html
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 11, Nov 2013
  • #37
Хак закрывает как внешние ссылки, так и внутренние. У вас на форуме я вижу, что внутренние не закрыты. Это полезно для ПС, когда внутренние ссылки не закрыты? Кстати как сделать, чтобы когда вставляешь внутреннюю ссылку на другую тему, она отображалась названием той темы (как здесь)?
 

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 11, Nov 2013
  • #38
inso:
Хак закрывает как внешние ссылки, так и внутренние.
Кто это вам сказал? :shok: Хак НЕ закрывает внутренние.
inso:
Это полезно для ПС, когда внутренние ссылки не закрыты?
Разумеется. Внутренние закрывать не нужно. Вернее нужно их часть, которая вредна (дубли текста) или мусорный материал.
inso:
(как здесь)
Здесь vbSEO
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 11, Nov 2013
  • #39
Veter:
Кто это вам сказал?
Хак НЕ закрывает внутренние.
Блин у меня навожу на ссылку на другую тему и надпись вылазит "внешняя ссылка реферер не передается". Видимо из-за домена .рф такая хрень(((
 

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 11, Nov 2013
  • #40
inso:
Видимо из-за домена .рф такая хрень(((
Да. Вероятно.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 11, Nov 2013
  • #41
inso:
Блин у меня навожу на ссылку на другую тему и надпись вылазит "внешняя ссылка реферер не передается". Видимо из-за домена .рф такая хрень(((
Разобрался. Когда копируешь ссылку, а потом вставляешь - то она выглядит так http: //xn---dkjfgajgjagjoisjg--p2hg/showthread

.....
Я вместо этой аброкадабры правил на мой-сайт.рф, чтобы выглядело так: http: //мой-сайт.рф/showthread

....
Ибо это тоже самое но выглядит нормально, а не так, как будто ссылка на какой то левый сайт с вирусами и еще хз чем.

Ну и после правки он уже воспринимает ее как внешнюю. Пока оставлю аброкадаброй тогда, потом попробую vbseo поставить.

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

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 11, Nov 2013
  • #42
Veter:
inso, vbSEO не исправит ситуацию с доменом РФ.
Я так понял, что там можно настроить, чтобы вместо ссылки показывалось название темы. Это уже лучше чем ничего. Вместо аброкадабры будет название темы как здесь. Или я понял неправильно?
 

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 11, Nov 2013
  • #43
С латиницей - да, как будет обстоять дело с кириллицей ни малейшего понятия...
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
  • 11, Nov 2013
  • #44
Чтож, пока не проверишь - не узнаешь =\. Начинаю понимать как я с этим доменом рф лоханулся...
 

inso


Рег
12 Jun, 2013

Тем
29

Постов
322

Баллов
612
  • 11, Nov 2013
  • #45
Я если честно их вообще за домены не считаю... одни проблемы с ними.
 

Wmboard


Рег
01 Jan, 2011

Тем
522

Постов
7188

Баллов
12408
Тем
49554
Комментарии
57426
Опыт
552966

Интересно