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

12 апреля, 2008

Маскировка ссылок

Эта статья об одном из довольно распространенных способов маскировки внешних ссылок (по-английски – 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

  1. <?php
  2. $linksList = array(
  3.     'page1.html' => 'http://www.google.com',
  4.     'page2.html' => 'http://www.php.net'
  5. );
  6. ?>

Здесь объявлен обычный массив. Ключом элемента является вторая часть адреса внутренней ссылки, а значением – адрес внешнего ресурса.

redirect.php

  1. <?php
  2. require_once('linkslist.php');
  3.  
  4. $request = $_SERVER['REQUEST_URI'];
  5. $dest = explode('/', $request);
  6. $newUrlKey = end($dest);
  7.  
  8. if (array_key_exists($newUrlKey, $linksList)) {
  9.     header('Location:'.$linksList[$newUrlKey]);
  10. }
  11. else {
  12.     header('Location:http://www.simplecoding.org');
  13. }
  14. ?>

Здесь мы подключаем файл с массивом ссылок (строка 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).

Самое главное, перед тем как использовать описанный в этой статье метод, вы должны четко понимать, что вам даст маскировка ссылок.

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

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в PHP, SEO

]]>

Комментарии (15)

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. Sam 12.04.2008 в 19:46 (Ответить)

    А ваедь и правда… зачем?

  2. Dixon 12.04.2008 в 21:49 (Ответить)

    Полностью согласен с последним абзацем. Тысячу раз проклинал Хабр за то, что они "прячут" реальные ссылки. жутко неудобно. где-то видел способ оформить внешние сылки. нечто вроде :after элемента…

  3. Roland Chanishvily 12.04.2008 в 22:45 (Ответить)

    Для WordPress я свой плагинчик рисовал. Называется RC Link Redirector лежит тут http://www.chanishvili.org/rc-redirector/

    Был сделан чтобы прятать рефовые линки и не давать ссылок ЧМОшникам-говнокоментаторам.

    1. Dixon 12.04.2008 в 23:01 (Ответить)

      чтобы прятать рефовые линки

      Спасибо, я как-то об этом не подумал.

    2. Scratch 13.04.2008 в 08:12 (Ответить)

      Против чмошников можно попоробовать плагин от Алексея Новикова :)
      А вот прятать вненнюю ссылку _всегда_ — не вижу смысла.
      Некоторые плагины (тот же snap)я прикрутил к _внешним_ ссылкам — так зачем мне их прятать?
      И многие ссылки в моих статьях — тоже прямые и внешние. Мне не жалко.

  4. Владимир 13.04.2008 в 14:11 (Ответить)

    По-поводу реф. ссылок.
    Может если их спрятать, то переходов будет и больше, но ведь посетитель сразу увидит, что попал куда-то не туда. А лично у меня такие переходы вызывают только раздражение (особенно когда я ничего покупать не собираюсь :-) ).

    Кроме того, интересный вопрос - реакция поисковиков. Ведь для них определить что ссылка внешняя не составит труда.
    Как вариант, можно для них установить noindex, nofollow, чтобы поисковик их просто проигнорировал.

    1. Dixon 13.04.2008 в 15:05 (Ответить)

      определенно согласен. noindex - хороший вариант

  5. Yuriy Drozdov 16.04.2008 в 10:07 (Ответить)

    Может, стоит добавить еще и эту строчку.
    Header( "HTTP/1.1 301 Moved Permanently" );

    1. Владимир 16.04.2008 в 13:45 (Ответить)

      Кстати, да. Поисковикам должно понравится :-)
      Насколько я знаю, 301 редирект - это единственный надежный способ гарантировать, что страница попадет в индекс с новым адресом.

  6. Kate 18.04.2008 в 09:57 (Ответить)

    Спасибо, все отлично получилось.
    Повесила на скрипт статистику скачки файлов.

  7. Виталий 08.05.2008 в 14:58 (Ответить)

    Сделал все как вы сказали…у меня не получается…а очень нужно…хочу прятать партнерские ссылки…сейчас все их обрезают…а зарабатывать надо…я никого не обманываю - открыто пишу что я партнер…но ссылку лучше спрятать…а за урл дефендер платить както не хочеца.)))

    1. Владимир 08.05.2008 в 16:50 (Ответить)

      Что именно не получается?
      Как выглядят ссылки?
      На странице вам нужно разместить скрытую ссылку, после этого занести прямые (партнерские) ссылки в массив.

      Небольшой совет. Установите плагин Live HTTP Headers для FireFox. Он позволяет просматривать HTTP заголовки. Это поможет определить проблему. Нужно выяснить, отправляет сервер rederect или нет.

  8. DimoninG 01.06.2008 в 18:10 (Ответить)

    Владимир, Вы странный способ используете.
    Конечно, немного рекламы: как сделать редирект ссылок.

    Статья моя. ИМХО, я предлагаю более простой и понятный способ. Для поисковиков оба способа выглядят одинаково - в конце редирект.

    Единственный минус у моего варианта - не прокатывают URL'ы с эмпирсендом (&). Помощь в решении этого вопроса приветствуется ;) Думаю, тогда будет идеальный и быстрый способ.

    1. Владимир 04.06.2008 в 21:42 (Ответить)

      Сразу хочу уточнить. Вы прячете ссылку только от поисковиков, посетитель по ее виду сможет определить что ссылка внешняя. Достоинство это или недостаток - вопрос другой.
      Кстати если вы хотите продавать ссылки через биржи вроде sape, то можете просто использовать теги . Внешние ссылки внутри этих тегов учитываться не будут.

      По-поводу &. Вариант в вашей статье (замена на %26) по-моему вполне нормальный. Но если нужно автоматизировать процесс, можно использовать php функцию urlencode(). Наверное, лучше всего написать плагин, который будет выполнять обработку всех адресов при сохранении или публикации поста.

    2. Владимир 04.06.2008 в 21:47 (Ответить)

      Наверное, лучше будет использовать rawurlencode(), т.к. в отличие от urlencode() она преобразует пробел в "%20", а не "+".

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>