Короткие ссылки средствами G-Drive

Для создания коротких ссылок можно воспользоваться каким-нибудь сервисом или потратить несколько минут и сделать свой собственный укоротитель ссылок средствами G-Drive без установки каких-либо сторонних модулей. Достаточно написать несколько строк кода и интегрировать их в новый или существующий сайт на платформе G-Drive/Gency.

Создайте в каталоге mods вашего сайта файл go.h.php следующего содержания:

<?php

header('Location: '.$page['link']);
exit;

Создайте в подготовленной для нового сайта базе данных таблицу категорий, выполнив следующий запрос:

CREATE TABLE `site_categories` (
  `id` varchar(10) NOT NULL,
  `link` tinytext NOT NULL,
  `bits` tinyint unsigned NOT NULL DEFAULT 32,
  `module` varchar(10) NOT NULL DEFAULT 'go',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Для управления короткими ссылками с помощью Gency создайте в базе данных вашего сайта представление и категорию, выполнив следующие запросы:

CREATE ALGORITHM=MERGE VIEW `site_go` AS
  SELECT `id`, `link` FROM `site_categories` WHERE `module`='go';

INSERT INTO `site_categories` (`id`, `link`, `bits`, `module`) VALUES
('go', '', 35, '');

Для запрета дублирования коротких ссылок по адресам формата /go/* можно указать в поле module созданной категории имя 404 и создать в каталоге mods вашего сайта файл 404.h.php следующего содержания:

<?php error(404);

Для интеграции поддержки коротких ссылок в существующий сайт вместо поля link можно использовать любое другое текстовое поле подходящего размера, например name или content, но нужно учитывать, что при добавлении целевой ссылки в поле, допускающее форматирование текста, вместе со ссылкой могут попадать теги форматирования текста. Чтобы этого избежать, целевую ссылку нужно вводить в режиме отображения HTML-кода, очищая содержимое поля от тегов. Также можно очищать значение поля от тегов непосредственно во время выполнения при помощи функции strip_tags.

Если в таблице категорий существующего сайта отсутствует поле module, можно размещать ссылки в отдельной таблице, создав соответствующую категорию. При этом формат коротких ссылок усложнится до, например, /go/*, а структура таблицы может быть упрощена до двух основных полей (id и link). Интересной особенностью подобных ссылок является то, что их идентификационная часть может быть многокомпонентной, например to/home (в целом ссылка будет иметь вид /go/to/home).

На главной странице специально созданного для коротких ссылок сайта можно разместить полный каталог (публичных) ссылок, расширив структуру таблицы полями name, content и т.п. Каталог можно сделать иерархическим, расширив структуру таблицы полем category и т.п., добавив дополнительные таблицы или представления.

На основе описанной технологии мы планируем создать персональный сервис коротких ссылок, для которого было зарегистрировано около двухсот доменов формата БЦЦ (буква-цифра-цифра) в зоне RU. Домены будут предоставляться по цене от 150 руб./год с гарантированной возможностью полной передачи прав на их использование за отдельную плату. Естественно, пользователи будут иметь возможность прикреплять к сервису и собственные домены. Другим источником монетизации сервиса может быть размещение рекламы в каталогах публичных ссылок и на появляющихся при переходе по ссылкам «страницах ожидания». Было бы интересно узнать ваше мнение о востребованности подобного сервиса.

Комментарии: 4

  1. Юлия

    Для поддержки двойного редиректа можно добавить перед вызовом функции header следующий код:

    if (empty($r1))
    {
      if (strlen($p1))
      {
        if ($p1!=strval($t=time()>>3)&&$p1!=strval($t-1))
        {
          error(404);
          return 1;
        }
      }
      else
      {
        if (strlen($p0)&&$r0['bits']&1)
        {
          $page['link']=$p.'/'.(time()>>3);
        }
      }
    }
    

    Двойной редирект может включаться индивидуально для каждой ссылки при помощи установки бита 0 поля bits. Данный код не предназначен для ссылок формата /go/*, но во избежание возможных ошибок в него было добавлено ветвление с условием empty($r1). Также данный код не предназначен для пустой ссылки /, но во избежание возможных ошибок в него было добавлено условие strlen($p0). Чтобы избавиться от данных ограничений, контрольный ключ можно передавать не через объект, а через параметр p, но для этого нужно расширить диапазон допустимых значений параметра в коде движка.

  2. Юлия

    В версии движка 3.07 диапазон допустимых значений параметра расширен до десяти цифр, поэтому делать это специально для передачи контрольного ключа при двойном редиректе не нужно. Фрагмент кода из предыдущего комментария с использованием параметра p может выглядеть так:

    if ($pn)
    {
      if ($pn!=($t=time()>>3)&&$pn!=$t-1)
      {
        error(404);
        return 1;
      }
    }
    else
    {
      if ($r0['bits']&4<<(strlen($p1)>0))
      {
        $page['link']=$p.'?p='.(time()>>3);
      }
    }
    

    Двойной редирект может включаться индивидуально для каждой однокомпонентной ссылки при помощи установки бита 2 поля bits и сразу для всех многокомпонентных ссылок при помощи установки бита 3 поля bits.

  3. Adam Baburin

    Как определить источник трафика с помощью php скрипта?

  4. Юлия

    В общем случае источник определяется по самой ссылке. Можно создать для каждого источника отдельную ссылку и размещать ее исключительно в этом источнике. Также можно добавлять к ссылке какой-либо модификатор, идентифицирующий источник размещения ссылки. Например, в G-Drive в качестве модификатора ссылки можно использовать объект или параметр p (при использовании двойного редиректа один параметр используется для передачи контрольного ключа, другой – идентификатора источника размещения ссылки).

    В качестве дополнительной информации об источнике можно использовать значение переменной $_SERVER['HTTP_REFERER'], предварительно проверив ее существование.

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

Ваш адрес E-mail не будет опубликован.