Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Сниппеты » PHP Сниппеты » Хак Rel Nofollow с помощью регулярного выражения

Хак Rel Nofollow с помощью регулярного выражения


     09.03.2015    nofollow, php, регулярные выражения, хак    PHP Сниппеты    2473

Хак можно изменить для любой cms, но в данном примере код для cms DLE. Поиск и замена всех внешних ссылок на лету по указанному шаблону, с добавлением атрибута rel=nofollow а также шифрованием ссылок в формат base64 и rawurlencode.
Открываем /index.php, ищем
echo $tpl->result['main'];
Выше добавляем нашу строку поиска и замены ссылок:
$tpl->result['main'] = preg_replace ( '~(<a(?!.*?class=\"trustlink\")(?>.*?href))=(["\'])([a-z0-9]++://(?![a-z0-9\.]*?'.$_SERVER['HTTP_HOST'].').*?)\2~eSi', '"\1=\"/goto/".rawurlencode(base64_encode(mb_convert_encoding( "$3", "UTF-8", "windows-1251" )))."/\" rel=\"nofollow\"";', $tpl->result['main'] );

Далее нужно создать правила перенаправления для веб-сервера.
Правила для htaccess:
RewriteRule ^goto/(.*)/$ /engine/go.php?url=$1 [L]
Правила для nginx:
rewrite "^/goto/(.*)/$" /engine/go.php?url=$1 last;

Адрес на котором будет запущен скрипт (ваш домен) является исключением , т.е ссылки не будут заменяться.
Для исключения ссылки от замены добавьте к ссылке class="trustlink"

Плюсы данного хака - это скорость работы, т.к задействована всего одна строчка кода. Исключения class="trustlink", для удобства регистрации на биржах ссылок.
Подходит для любой cms, необходимо только заменить переменную источника поиска и страницу перенаправления url.

Минусы. Ограниченный функционал, отсутствие черных и белых списков, отсутствие исходящих страниц с ожиданием перенаправления, если сравнивать например с модулем dude smart leech,

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

Пример использования кода, ссылка на google.ru будет иметь вид
<a href="/goto/aHR0cDovL2dvb2dsZS5ydQ%3D%3D/" rel="nofollow" target="_blank" style="text-decoration: line-through !important;">google.ru</a>

10 комментариев

manucoz
Юзер

manucoz - 5 марта 2017 16:00 -

А можно сделать что бы ссылка оставалась та же? а не изменялась?

vitnet
Эксперт

vitnet - 5 марта 2017 17:29 -

$tpl->result['main'] = preg_replace('~(<a(?!.*?class=\"trustlink\")(?>.*?href))=(["\'])([a-z0-9]++://(?![a-z0-9\.]*?' . $_SERVER['HTTP_HOST'] . ').*?)\2~eSi', '"\1=\"/goto/$3\" rel=\"nofollow\""', $tpl->result['main']);

manucoz
Юзер

manucoz - 5 марта 2017 19:31 -

Parse error: syntax error, unexpected ']' in /.../index.php on line 376

vitnet
Эксперт

vitnet - 5 марта 2017 19:38 -

Хз, у меня все ок.

manucoz
Юзер

manucoz - 5 марта 2017 19:40 -

все я сам исправил но остается в начале адрес на мой сайт а потом на чужой
Пример http://a-eda.ru/interesnye-sovety-kulinaram/1000-esche-raz-pro-chay.html

vitnet
Эксперт

vitnet - 5 марта 2017 19:46 -

Вообще то изначально так и было задумано.
$tpl->result['main'] = preg_replace('~(<a(?!.*?class=\"trustlink\")(?>.*?href))=(["\'])([a-z0-9]++://(?![a-z0-9\.]*?' . $_SERVER['HTTP_HOST'] . ').*?)\2~eSi', '"\1=\"$3\" rel=\"nofollow\""', $tpl->result['main']);

manucoz
Юзер

manucoz - 5 марта 2017 19:48 -

спасибо все понял я в htaccess код вставил не туда =) щя все заработало как надо спасибо =*

manucoz
Юзер

manucoz - 12 марта 2017 11:25 -

а Noindex туда нельзя впихнуть? что бы работало все

manucoz
Юзер

manucoz - 5 марта 2017 16:02 -

хочу что бы просто добавлялось ко всем ссылкам nofollow

manucoz
Юзер

manucoz - 12 марта 2017 16:23 -

а Noindex туда нельзя впихнуть? что бы работало все

Чтобы комментировать - войдите или зарегистрируйтесь на сайте
наверх