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

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 комментариев

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