Редирект и запрет индексации внешних ссылок
Плагин срабатывает на пререндер страницы, отлавливает все внешние ссылки, и, в зависимости от настроек, делает редирект через внутреннюю страницу, добавляет target="_blank", rel=«nofollow» или оборачивает в noindex.
Доступные параметры:
После сохранения, смотрим ID созданного документа, открываем плагин extLinkRedirector, переходим в параметры, разблокируем параметры по умолчанию. Ставим use_redirect — Да, redirect_page_id — вписываем ID созданного документа. В моем случае, алиас у страницы со сниппетом редиректа задан away, ссылки имеют вид:
Скачать транспортный пакет можно с GitHub
Компонент бесплатный. Буду рад замечаниям и предложениям по улучшению функционала.
Доступные параметры:
- use_redirect — заменять внешние ссылки на редирект через внутреннюю страницу
- redirect_page_id — ID страницы, которая отвечает за редирект внешних ссылок
- use_stop_words — использовать стоп слова в адресе ссылки
- stop_words — список стоп слов, разделитель запятая
- use_stop_classes — использовать стоп классы (либо другие атрибуты ссылки, идет проверка stripos по полному html коду ссылки)
- stop_classnames — список стоп атрибутов, разделитель запятая
- add_blank — добавлять ссылкам атрибут target="_blank"
- add_nofollow — добавлять ссылкам атрибут rel=«nofollow»
- add_noindex — добавлять ссылкам обертку noindex
[[!extLinkRedirector]]
После сохранения, смотрим ID созданного документа, открываем плагин extLinkRedirector, переходим в параметры, разблокируем параметры по умолчанию. Ставим use_redirect — Да, redirect_page_id — вписываем ID созданного документа. В моем случае, алиас у страницы со сниппетом редиректа задан away, ссылки имеют вид:
http://*****.**/away?url=http://modx.com
Скачать транспортный пакет можно с GitHub
Компонент бесплатный. Буду рад замечаниям и предложениям по улучшению функционала.
Комментарии: 39
Здравствуйте. Не пойму как его поставить. Загрузил транспорт.zip и нажал «Установить», а там ошибка
Консоль запущена...
Пробуем установить пакет с подписью: extlinkredirector-0.1-beta
Пакет найден... сейчас идёт подготовка к его установке.
xPDOZip: Error opening archive at **********/core/packages/extlinkredirector-0.1-beta.transport.zip
Could not unpack package **********/core/packages/extlinkredirector-0.1-beta.transport.zip to **********/core/packages/. SIG: extlinkredirector-0.1-beta
Невозможно установить пакет с подписью: extlinkredirector-0.1-beta
Доброго дня. Может быть проблема с правами? На modhost тестовом только что проверил. Да и у меня на 3 сайтах без проблем установилось.
Проверить работу можно тут: s4437.h2.modhost.pro/
Проверить работу можно тут: s4437.h2.modhost.pro/
Всё хорошо, у меня файл качнулся битым, заново качнул и всё ОК.
На одном новостном сайте как-то приглядывал такие редиректы, но не знал как у себя на MODX реализовать. Спасибо, отличный компонент.
Я, по ходу, чего-то не понимаю в этой жизни. Как его правильно скачать с ГитХаба и установить? У меня такая же ошибка как и у Виталия.
Делаю так: ПКМ на extlinkredirector-0.1-beta.transport.zip — сохранить как… Затем в Модэксе загружаю пакет и устанавливаю.
Делаю так: ПКМ на extlinkredirector-0.1-beta.transport.zip — сохранить как… Затем в Модэксе загружаю пакет и устанавливаю.
Нажимаем на файл extlinkredirector-0.1-beta.transport.zip, потом на кнопку Raw.
Должно начаться скачивание файла.
Должно начаться скачивание файла.
Лучи добра тебе, добрый молодец.
Автору благодарность!
Можно только чуть подробнее для таких как Я разъяснить следующие параметры:
Можно только чуть подробнее для таких как Я разъяснить следующие параметры:
stop_words — список стоп слов, разделитель запятаяНе понимаю, зачем и для чего нужны стоп слова и стоп классы)
stop_classnames — список стоп атрибутов, разделитель запятая
По этим параметрам исключаются внешние ссылки, которые не должны обрабатываться плагином. Допустим, ссылки на modx.pro и на modstore.pro надо оставить в неизменном виде, в stop_words пишем «modx.pro,modstore.pro» (без кавычек). Таким образом, если в ссылке содержится хоть одна из этих фраз, она вообще никак не модифицируется. Поиск идет по атрибуту «href».
Параметр stop_classnames работает несколько иначе. Он ищет совпадение слов в полном коде ссылки. У меня за это отвечает класс «extlink». Например, эти ссылки плагин не тронет:
Параметр stop_classnames работает несколько иначе. Он ищет совпадение слов в полном коде ссылки. У меня за это отвечает класс «extlink». Например, эти ссылки плагин не тронет:
<a href="http://modx.com" class="extlink">modx.com</a>
<a href="http://modx.com" data-link="extlink">modx.com</a>
<a href="http://modx.com" id="extlink">modx.com</a>
А вот эта (stop_words) фишка наиумнейшая))!!! Для мультидоменных сайтов просто must have!
Вопроос: В репозитарии хоть каком то планируется размещение пакета? Да, ставить секунды, но если из репозитария — удобнее же)
Вопроос: В репозитарии хоть каком то планируется размещение пакета? Да, ставить секунды, но если из репозитария — удобнее же)
Могу отправить в modstore.pro, если разместят конечно :)
Было бы хорошо!
Спасибо, выложили!
modstore.pro/packages/utilities/extlinkredirector
modstore.pro/packages/utilities/extlinkredirector
Есть небольшая особенность в этом компоненте, если мы пишем стоп слова, то они чувствительны к регистру. Т.е. если напишем в стоп слова site.ru а сама ссылка на сайте будет Site.ru, то исключение не сработает, и нужно в стоп словах прописать site.ru,Site.ru
Странно, у меня регистр не имеет значения. Посмотрим, может кто еще отпишется по поводу этой проблемы, сделаем немного по другому. Сейчас вот таким образом проверка идет:
Документация: stripos — Возвращает позицию первого вхождения подстроки без учета регистра
foreach ($words as $word) if (stripos($data, trim($word)) !== false) return true;
Документация: stripos — Возвращает позицию первого вхождения подстроки без учета регистра
Почему, если ссылка относительная, плагин её воспринимает как внешнюю? Редиректа нет, но добавляет target="_blank", rel=«nofollow»
Как это можно поправить?
<a rel="nofollow" target="_blank" href="/razdel/categoriya/statya" title="заголовок">
Как это можно поправить?
Не заметил такой проблемы, вот тут можно поглядеть: s4737.h2.modhost.pro/
Ссылка s4737.h2.modhost.pro/manager/
Логин s4737
Пароль I03qKiPI5gGQ
И у меня пропала. Я сайт на https перевёл. Может из-за этого было. Кеш или ещё чего там…
Благодарю за обратную связь.
Благодарю за обратную связь.
Привет. Не работает с ссылками, в которых есть другие блоки, мой пример:
<a href="http://site1.ru/">Ссылка 1</a> // будет обработана
<a href="http://site1.ru/"> // НЕ будет обработана
<img src="[[++rb_base_dir]]img/logo1.png" alt="Лого1"/>
<span>Ссылка 1</span>
</a>
Самое простое — написать весь этот код в одну строку:
<a href="http://site1.ru/"><img src="[[++rb_base_dir]]img/logo1.png" alt="Лого1"/><span>Ссылка 1</span></a>
Так работает
Спасибо за компонент!
Было бы здорово ещё добавить возможность устанавливать задержку в миллисекундах )
Было бы здорово ещё добавить возможность устанавливать задержку в миллисекундах )
А зачем эта задержка? Что-то даже прикинуть не могу, какая от этого может быть польза.
Ну например, баннер рекламный воткнуть какой-нибудь ) или предупреждение, что внешняя ссылка может вести на сайт с вредоносным кодом, предложить не уходить с сайта.
Замени сниппет extLinkRedirector на такой
<?php
if (isset($_GET['url'])) {
$url = $modx->stripTags($_GET['url']);
if (!isset($delay)) $delay = 3;
else $delay = floatval($delay);
return '<script>setTimeout(function() { location.href = "'.$url.'"; },'.($delay*1000).');</script>';
}
return;
Потом на странице, которая будет осуществлять редирект вызываем:[[!extLinkRedirector? &delay=`5`]]
Где delay — задержка в секунда перед редиректом. По умолчанию 3 секунды, даже если параметр не указан.
Спасибо, как раз то что нужно! )
В чем проблема сделать это самому на странице указанной в redirect_page_id? это же элементарщина
наверное сложность в том что с этой страницы он не задерживаясь редиректит, а нужно чтобы тыкали или через определенное время автоматом переходило )
А если убрать оттуда сниппет и сделать js редирект с какой нужно задержкой?
Оличное решение, спасибо.
Вот и у меня что-то не так идет. В верху сайта есть:
<li><a href="[[~1]]" title="[[#1.menutitle]]">[[#1.menutitle]]</a></li>
На выходе<li><a rel="nofollow" target="_blank" href="/" title="Главная">Главная</a></li>
Хотя на остальных сайтах такого не замечала :(
Не видя сайта, не смогу помочь. Отправьте ссылку на почту, в профиле кнопка.
Или, если проблема только с этой ссылкой, можете использовать «stop_classnames».
Или, если проблема только с этой ссылкой, можете использовать «stop_classnames».
Ребята, а что делать если плагин успешно добавляет nofollow и blank но совсем не реагирует на настройки, да и ссылки не преобразовывает? ( Я уже пробовал по-всякому, ничего не получается
На какие настройки не реагирует? Опишите проблему подробнее, желательно с примерами.
Привет из 2018! Работает ваш плагин на новостном сайте, есть некоторая проблема вот с чем:
на сайте реализован переброс записей из полного оформления в AMP. Во-первых, согласно вашему снипету происходит замена "<a", но следует менять "<a "(с пробелом) так как тег <amp-img… ошибочно заменяется. что касается замены тегов ссылок — в AMP по стандарту не поддерживаются свойства тега . На данный момент я сделал заглушку через replace, но хотел спросить, как изменить код плагина для того, чтобы он запускался на всех страницах, кроме тех. в адресе которых есть, например, "../amp/...". Прошу простить мою безграмотность — я не работаю с php)
на сайте реализован переброс записей из полного оформления в AMP. Во-первых, согласно вашему снипету происходит замена "<a", но следует менять "<a "(с пробелом) так как тег <amp-img… ошибочно заменяется. что касается замены тегов ссылок — в AMP по стандарту не поддерживаются свойства тега . На данный момент я сделал заглушку через replace, но хотел спросить, как изменить код плагина для того, чтобы он запускался на всех страницах, кроме тех. в адресе которых есть, например, "../amp/...". Прошу простить мою безграмотность — я не работаю с php)
В этом плагине проставить пробелыить пробелы
Кусок кода заменить на этот
Кусок кода заменить на этот
if ((boolean)$extLinkRedirector->config['add_blank']) {
$link = preg_replace('/target=["\'][^\'".]+["\']/', '', $link);
$link = str_replace('<a ','<a target="_blank" ',$link);
}
if ((boolean)$extLinkRedirector->config['add_nofollow']) {
$link = preg_replace('/rel=["\'][^\'".]+["\']/', '', $link);
$link = str_replace('<a ','<a rel="nofollow" ',$link);
}
if ((boolean)$extLinkRedirector->config['add_noindex']) {
$link = str_replace('</a>','</a><!--/noindex-->',$link);
$link = str_replace('<a ','<!--noindex--><a ',$link);
}
Это было сделано сразу. Вы не прочли мою строку о том, что «в AMP по стандарту не поддерживаются свойства тега ». Любые rel и target не валидны для AMP. Потому мне необходимо именно не применять плагин на страницах с "/amp/" в URL
Доброго дня.
При сканировании одного из своих сайтов на уязвимость, я обнаружил, что использование данного плагина открывает возможность к sql-инъекции.
При сканировании одного из своих сайтов на уязвимость, я обнаружил, что использование данного плагина открывает возможность к sql-инъекции.
Здравствуйте! планируется ли апдейт данного плагина, например, для защиты от несанкционированного использования? Сейчас плагин делает открытый редирект, который могут использовать спамеры чтобы закинуть кучу ссылок в поисковики, используя ваш сайт.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.