Скрываем внешние ссылки (Редирект)

PHP
Быть может кому то пригодится данный метод скрытия внешних ссылок.
Есть очень много методов позволяющих скрыть внешние ссылки, но зачастую они очень громоздкие и используют свою базу данных, либо MySQL, либо текстовую с массивом ссылок.

Я приведу пример скрытия ссылок не использующий какую либо базу данный, нам потребуется написать простенький код, который зашифрует внешнюю ссылку.

И так. Скажем у нас есть какая то CMS и нам нужно автоматом прогонять ссылки через функцию. Практически в каждой CMS есть bbcode или html который формирует шаблон ссылки, а именно:

<a href="$link">$link</a>


Где $link — ссылка

Давайте теперь приступим к написанию функции, которая будет шифровать ссылку.

function enCodeUrl($link) {
       
// $link - наша ссылка которую необходимо обработать
        $host
= $_SERVER['SERVER_NAME'] ;
        $domain
= parse_url($link, PHP_URL_HOST);
           
// Проверим внешняя это ссылка или внутренняя
            $host
== $domain ? $url = $link : $url = 'http://' . $host . '/link.php?goto=' . base64_encode($link) ;
       
return $url ;
   
}


Думаю тут все понятно и проблем с разбром функции не должно возникнуть. Но все же немного поясню.
И так, как я писал уже выше о шаблоне ссылки, теперь ваш шаблон нужно будет немножко подправить, подключив функцию:

<?php
   $link
= 'site.ru' ;
   echo $urlTemplates
= '<a href=\'' . enCodeUrl($link) . '\'>'. $link .'</a>' ;
?>


Увидим зашифрованную ссылку, в HTML она будет выглядеть так:
<a href='http://site.ru/link.php?goto=c2l0ZS5ydQ=='>site.ru</a>


Теперь все внешние ссылки на нашем сайте будут зашифрованы, а добавив стручку в robots.txt они будут еще и закрыты для поисковых систем.

Пришло время строить редирект
И так для того чтобы пользователю кликнувшему на нашу ссылку можно было попасть на внешний сайт, нам нужно декодировать ссылку и переадресовать пользователя.

Создадим файл link.php со следующем кодом
<?php
   
//принимаем ссылку
    $link
= $_GET['goto'] ;
   
   
// Декодируем полученную ссылку
    $link
= base64_decode($link) ;
   
       
// Подготовка ссылки
       
if ($link == "") {
            $link
= $_SERVER["HTTP_REFERER"];
       
} elseif (!preg_match("/^http\:\/\//", $link) && !preg_match("/^https\:\/\//", $link) && !preg_match("/^ftp\:\/\//", $link)) {
            $link
= "http://" . $link;
       
}
       
// Отправляем пользователя по ссылку
         header
("Location: $link");    
?>


Тут все просто, мы приняли закодированную ссылку, раскодировали ее, проверяли и отправили пользователя по скрытой ранее ссылке.

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

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.