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

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

Пользователь
Регистрация
30.01.12
Сообщения
1.751
Реакции
965
Баллы
28
Возраст
47
Наверное, вы обратили внимание, как на этом форуме выглядят все внешние ссылки? При наведении на них мышкой появляется надпись "Внешняя ссылка, реферер не передается..." Эта темка посвящена тому, как сделать то же самое у вас на форуме.
Поисковики перестанут видеть внешние ссылки, для них это будет просто тег <span>

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

Порядок действий:
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, включите в настройках пункт "Автоматически вставлять ссылки".
Примечание: браузер Опера реферер всё же передает.
Проверила данный хак на своём форуме - работает.
 

Вложения

  • external_links.zip
    3.7 KB · Просмотры: 59
Последнее редактирование:

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Добавлю, что требуется редактирование исходных файлов движка. Если будете менять линейку, или обновлять версию, то работать перестанет.
Ну и разработчик Kerk с vbsupport.org
 

Аркадий 10

Пользователь
Регистрация
06.01.12
Сообщения
487
Реакции
83
Баллы
13
Спасибо. Ссылки стали черного, а не синего цвета при наводе на них курсора выскакивает сообщение:
"Внешняя ссылка, реферер не передается."
Как понимаю выполнил рекомендации правильно? :) Еще раз спасибо.
 

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

Пользователь
Регистрация
30.01.12
Сообщения
1.751
Реакции
965
Баллы
28
Возраст
47

Dmi Try

Пользователь
Регистрация
20.06.12
Сообщения
21
Реакции
0
Баллы
1
Всё установил по инструкции. Ссылки все изменились как и положено. Но при нажатии на ссылку она не открывается. Помогите.
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
А что происходит при нажатии на ссылку?
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Проверьте еще раз все ли точно вы выполнили по инструкции, затем сделайте запрос к БД, что в инструкции, и попробуйте очистить кэш и перестроить информацию о темах в админке.
 

Dmi Try

Пользователь
Регистрация
20.06.12
Сообщения
21
Реакции
0
Баллы
1
Да я уже раз пять проверял. Ничего. Когда наводишь курсор, то вылазит это "Внешняя ссылка, реферер не передается." А при нажатии ничего. Может проблема с ява-скриптом?
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Кэш очищали? Информацию о темах перестраивали? Дайте ссылку посмотреть.
 

Dmi Try

Пользователь
Регистрация
20.06.12
Сообщения
21
Реакции
0
Баллы
1
Там я уже всё перепробовал.
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Ну значит начинайте сначала:

редактируем файл includes/class_bbcode.php
ищем там функцию function handle_bbcode_url($text, $link)

Функцию правильно нашли? Исходный файл сохранили я надеюсь? Открываете заново исходник, ищете:

Код:
 function handle_bbcode_url($text, $link)	{	$rightlink = trim($link);	if (empty($rightlink))	{	$rightlink = trim($text);	}	$rightlink = str_replace(array('`', '"', "'", '['), array('`', '"', ''', '['), $this->strip_smilies($rightlink));	$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	{	$text = str_replace(' ', '', $text);	}	}	return "<a href=\"$rightlink\" target=\"_blank\">$text</a>";	}

Меняете на:

Код:
 function handle_bbcode_url($text, $link) { $rightlink = trim($link); if (empty($rightlink)) { $rightlink = trim($text); } $rightlink = str_replace(array('`', '"', "'", '['), array('`', '"', ''', '['), $this->strip_smilies($rightlink)); $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 { $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; } } 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>
 
  • Мне нравится
Реакции: inso

Dmi Try

Пользователь
Регистрация
20.06.12
Сообщения
21
Реакции
0
Баллы
1
Всё именно так и делал. А вот это что означает? внизу фотографии.
 
Последнее редактирование:

Dmi Try

Пользователь
Регистрация
20.06.12
Сообщения
21
Реакции
0
Баллы
1
Спасибо разобрался.)) Я этот скрипт всунул в headinclude основного стиля, а нужно было в обычный стиль.
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Ну бывает... самая главная ошибка у всех это невнимательность :)
 

dimaggh

Пользователь
Регистрация
06.07.12
Сообщения
1
Реакции
0
Баллы
1
спс прикольно
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Продукт в первом посте темы. Во вложении.
Порядок установки также описан в первом посте.

Откуда и куда его импортировать?
Админка, продукты и модули, управление продуктами, Добавить/импортировать продукт



Шаблон headinclude где расположен?
Админка, стили и шаблоны, управление стилями, редактировать шаблоны, в списке находите нужный.


Автоспец, изучайте админку. VB очень мощный движок, но вполне доступный и логичный.
 

джинася

Пользователь
Регистрация
13.03.12
Сообщения
547
Реакции
229
Баллы
28
Ничего у меня не получается! :wall::mad1:
Как исправляю

includes/class_bbcode.php,
так у меня не загружаются темы.

Вот как в документе:
* @return string HTML representation of the tag.
*/
function handle_bbcode_url($text, $link)
{
$rightlink = trim($link);
if (empty($rightlink))
{
$rightlink = trim($text);
}
$rightlink = str_replace(array('`', '"', "'", '['), array('`', '"', ''', '['), $this->strip_smilies($rightlink));

$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
{
$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;
}
}
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 секунды
Ой,смайлики...:pardon:
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Скачайте ваш файл class_bbcode.php, запакуйте и выложите здесь. Исходник разумеется.
 

джинася

Пользователь
Регистрация
13.03.12
Сообщения
547
Реакции
229
Баллы
28
Пардон,только детей уложила. :blush:
 

Вложения

  • class_bbcode.zip
    16.8 KB · Просмотры: 2

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Пробуйте земенить ваш файл вот этим.
Исходник сохраните естественно.
 

Вложения

  • class_bbcode.zip
    17.4 KB · Просмотры: 4

джинася

Пользователь
Регистрация
13.03.12
Сообщения
547
Реакции
229
Баллы
28
Пробуйте земенить ваш файл вот этим.
Исходник сохраните естественно.
Заменила. Темы открываются.
Но ссылки не изменились.
Вот это надо теперь сделать:
5) Смотрим на форуме - изменились внешние ссылки или нет. Если нет, то переходим в phpmyAdmin и выполняем запрос к базе данных:
На хостинге?
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Продукт импортировали?
В шалон headinclude вашего стиля вставили скрипт?
Очистите кэш.

В БД обычно не требуется лезть
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Ну попробуйте ответить там в какой-нибудь теме со ссылкой. Посмотрите эффект.
 
  • Мне нравится
Реакции: inso

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Дайте ссылку на страницу
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Вы наверное продукт не в той кодировке поставили...
 

джинася

Пользователь
Регистрация
13.03.12
Сообщения
547
Реакции
229
Баллы
28

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Ну если новые как нужно, тогда все в порядке с хаком.
А вот если старые крокозябрами, то наверное у вас тоже проблемы с кодировкой БД...
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Ну тогда на старых может быть кэш, если вы пробовали ставить хак с разной кодировкой...
Думаю, что ничего страшного.
 

inso

Пользователь
Регистрация
12.06.13
Сообщения
362
Реакции
14
Баллы
13
Поясните новичку пожалуйста, я правильно понимаю, что если поставлю этот хак, то поисковики меня не накажут за неактуальные или левые ссылки, размещенные пользователями на форуме?
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Да, они не будут внешними ссылками для ПС.
 

inso

Пользователь
Регистрация
12.06.13
Сообщения
362
Реакции
14
Баллы
13
Спасибо пользуясь инструкцией и комментариями в теме, установил хак. Поначалу ничего не изменилось, но перечитав тему, попробовал написать сообщение и выложил новую ссылку. Хак заработал.
 

Автоспец

Пользователь
Регистрация
12.09.12
Сообщения
101
Реакции
1
Баллы
13
Здравствуйте. Посоветуйте пожалуйста, как закрыть от индексации ссылки и картинки с др сайтов. Хак не предлагать - я его прикрутить не могу (раз 5 пробовал:(). Может какой скрипт поставить? Мне нужно только форум закрыть от индесации ссылок, а не весь сайт целиком. Будет ли картинка, загруженная с др. сайта, считаться ссылкой и передавать вес?
 
Последнее редактирование:

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Будет ли картинка, загруженная с др. сайта, считаться ссылкой и передавать вес?

Если речь о тэге IMG, то нет.

Хак не предлагать - я его прикрутить не могу (раз 5 пробовал)
Речь об этом хаке? Хм... а что там сложного?

Есть еще хак https://lumtu.com/haki-vbulletin/2499-hak-skrytiya-ssylok-ot-gostei-hide-links-guest.html
 

inso

Пользователь
Регистрация
12.06.13
Сообщения
362
Реакции
14
Баллы
13
Хак закрывает как внешние ссылки, так и внутренние. У вас на форуме я вижу, что внутренние не закрыты. Это полезно для ПС, когда внутренние ссылки не закрыты? Кстати как сделать, чтобы когда вставляешь внутреннюю ссылку на другую тему, она отображалась названием той темы (как здесь)?
 

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
Хак закрывает как внешние ссылки, так и внутренние.

Кто это вам сказал? :shok:
Хак НЕ закрывает внутренние.

Это полезно для ПС, когда внутренние ссылки не закрыты?
Разумеется. Внутренние закрывать не нужно. Вернее нужно их часть, которая вредна (дубли текста) или мусорный материал.


Здесь vbSEO
 

inso

Пользователь
Регистрация
12.06.13
Сообщения
362
Реакции
14
Баллы
13
Кто это вам сказал?
Хак НЕ закрывает внутренние.
Блин у меня навожу на ссылку на другую тему и надпись вылазит "внешняя ссылка реферер не передается". Видимо из-за домена .рф такая хрень(((
 

inso

Пользователь
Регистрация
12.06.13
Сообщения
362
Реакции
14
Баллы
13
Блин у меня навожу на ссылку на другую тему и надпись вылазит "внешняя ссылка реферер не передается". Видимо из-за домена .рф такая хрень(((
Разобрался. Когда копируешь ссылку, а потом вставляешь - то она выглядит так http: //xn---dkjfgajgjagjoisjg--p2hg/showthread.....
Я вместо этой аброкадабры правил на мой-сайт.рф, чтобы выглядело так: http: //мой-сайт.рф/showthread.... Ибо это тоже самое но выглядит нормально, а не так, как будто ссылка на какой то левый сайт с вирусами и еще хз чем. Ну и после правки он уже воспринимает ее как внешнюю.

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

Wmboard

Пользователь
Регистрация
01.01.70
Сообщения
9.274
Реакции
2.665
Баллы
28
Адрес
На wmboard
inso, vbSEO не исправит ситуацию с доменом РФ.
 

inso

Пользователь
Регистрация
12.06.13
Сообщения
362
Реакции
14
Баллы
13
inso, vbSEO не исправит ситуацию с доменом РФ.

Я так понял, что там можно настроить, чтобы вместо ссылки показывалось название темы. Это уже лучше чем ничего. Вместо аброкадабры будет название темы как здесь. Или я понял неправильно?
 

Статистика форума

Темы
200.635
Сообщения
380.523
Пользователи
327.876
Новый пользователь
pm1199
Сверху Снизу