Как «спрятать» внешние ссылки. Небольшой PHP скрипт

Эта статья об одном из довольно распространенных способов маскировки внешних ссылок (по-английски – link cloaking).
Работает link cloaking следующим образом. Просматривая страницу, посетитель видит обычную внутреннюю ссылку. Но, после перехода по ней – попадает на другой сайт.
На сегодняшний день существует несколько способов создания таких ссылок. Но мы рассмотрим один из самых удачных (с моей точки зрения), не требующий поддержки со стороны браузера.
Идея заключается в использовании редиректа и реализуется в два этапа:
1) в корне сайта (папка, на которую указывает DOCUMENT_ROOT) создаем папку с именем pages.
2) в этой папке размещаем три файла:
linkslist.php – в нем будет массив с внешними ссылками;
redirect.php – анализирует ссылку по которой был выполнен переход и отправляет посетителя на внешний ресурс;
.htaccess – передает все запросы скрипту redirect.php.
Принцип работы
На страницах сайта вы размещаете ссылки вида: http://site_name/pages/get/вторая_часть_адреса, где вторая_часть_адреса – может быть чем угодно, например, mypage.html или page1 и т.д. Тут все зависит от вашей фантазии.
Преобразование адреса происходит следующим образом. При любом переходе по ссылке вида http://site_name/pages/get/......... к ней будут применены правила из .htaccess.
Примечание. На сервере должен быть установлен и запущен apache mod_rewrite.
С помощью правил в этом файле, мы заменяем в адресе get на redirect.php. Т.е. получится:
http://site_name/pages/redirect.php/вторая_часть_адреса
Скрипт redirect.php по второй части адрса выбирает внешнюю ссылку и отправляет браузеру redirect.
Описанный порядок преобразования адресов изображен на диаграмме.

Теперь рассмотрим сами скрипты
linkslist.php
-
<?php
-
'page1.html' => 'http://www.google.com',
-
'page2.html' => 'http://www.php.net'
-
);
-
?>
Здесь объявлен обычный массив. Ключом элемента является вторая часть адреса внутренней ссылки, а значением – адрес внешнего ресурса.
redirect.php
-
<?php
-
require_once('linkslist.php');
-
-
$request = $_SERVER['REQUEST_URI'];
-
-
}
-
else {
-
}
-
?>
Здесь мы подключаем файл с массивом ссылок (строка 2). После этого выделяем из адреса вторую часть (строки 5, 6) и формируем заголовок с редиректом (строки 8-13).
.htaccess
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^get/(.+) /pages/redirect.php/$1 [L]
</IfModule>
В этом файле мы создали правило, которое меняет get на redirect.php в адресе.
Заключение
На сегодняшний день существует несколько готовых решений, которые выполняют эти же функции (например, плагины для WordPress вроде Hidden Affiliate Links).
Самое главное, перед тем как использовать описанный в этой статье метод, вы должны четко понимать, что вам даст маскировка ссылок.
Ведь, по большому, счету маскировка ссылок очень напоминает обман посетителя. Или у вас другое мнение?
Понравилась статья? Подпишитесь на продолжение
!
Комментарии (15)
Вы можете отслеживать обсуждение записи с помощью RSS 2.0 ![]()
Вы также можете оставить комментарий, или трекбек с Вашего сайта.
Оставить комментарий







А ваедь и правда… зачем?
Полностью согласен с последним абзацем. Тысячу раз проклинал Хабр за то, что они "прячут" реальные ссылки. жутко неудобно. где-то видел способ оформить внешние сылки. нечто вроде :after элемента…
Для WordPress я свой плагинчик рисовал. Называется RC Link Redirector лежит тут http://www.chanishvili.org/rc-redirector/
Был сделан чтобы прятать рефовые линки и не давать ссылок ЧМОшникам-говнокоментаторам.
Спасибо, я как-то об этом не подумал.
Против чмошников можно попоробовать плагин от Алексея Новикова
А вот прятать вненнюю ссылку _всегда_ — не вижу смысла.
Некоторые плагины (тот же snap)я прикрутил к _внешним_ ссылкам — так зачем мне их прятать?
И многие ссылки в моих статьях — тоже прямые и внешние. Мне не жалко.
По-поводу реф. ссылок.
).
Может если их спрятать, то переходов будет и больше, но ведь посетитель сразу увидит, что попал куда-то не туда. А лично у меня такие переходы вызывают только раздражение (особенно когда я ничего покупать не собираюсь
Кроме того, интересный вопрос - реакция поисковиков. Ведь для них определить что ссылка внешняя не составит труда.
Как вариант, можно для них установить noindex, nofollow, чтобы поисковик их просто проигнорировал.
определенно согласен. noindex - хороший вариант
Может, стоит добавить еще и эту строчку.
Header( "HTTP/1.1 301 Moved Permanently" );
Кстати, да. Поисковикам должно понравится
Насколько я знаю, 301 редирект - это единственный надежный способ гарантировать, что страница попадет в индекс с новым адресом.
Спасибо, все отлично получилось.
Повесила на скрипт статистику скачки файлов.
Сделал все как вы сказали…у меня не получается…а очень нужно…хочу прятать партнерские ссылки…сейчас все их обрезают…а зарабатывать надо…я никого не обманываю - открыто пишу что я партнер…но ссылку лучше спрятать…а за урл дефендер платить както не хочеца.)))
Что именно не получается?
Как выглядят ссылки?
На странице вам нужно разместить скрытую ссылку, после этого занести прямые (партнерские) ссылки в массив.
Небольшой совет. Установите плагин Live HTTP Headers для FireFox. Он позволяет просматривать HTTP заголовки. Это поможет определить проблему. Нужно выяснить, отправляет сервер rederect или нет.
Владимир, Вы странный способ используете.
Конечно, немного рекламы: как сделать редирект ссылок.
Статья моя. ИМХО, я предлагаю более простой и понятный способ. Для поисковиков оба способа выглядят одинаково - в конце редирект.
Единственный минус у моего варианта - не прокатывают URL'ы с эмпирсендом (&). Помощь в решении этого вопроса приветствуется
Думаю, тогда будет идеальный и быстрый способ.
Сразу хочу уточнить. Вы прячете ссылку только от поисковиков, посетитель по ее виду сможет определить что ссылка внешняя. Достоинство это или недостаток - вопрос другой.
Кстати если вы хотите продавать ссылки через биржи вроде sape, то можете просто использовать теги
По-поводу &. Вариант в вашей статье (замена на %26) по-моему вполне нормальный. Но если нужно автоматизировать процесс, можно использовать php функцию urlencode(). Наверное, лучше всего написать плагин, который будет выполнять обработку всех адресов при сохранении или публикации поста.
Наверное, лучше будет использовать rawurlencode(), т.к. в отличие от urlencode() она преобразует пробел в "%20", а не "+".