Короткие ссылки средствами 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 создайте в базе данных вашего сайта представление и категорию, выполнив следующие запросы:

ALTER TABLE `site_categories` ADD KEY (`module`);

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 руб./год с гарантированной возможностью полной передачи прав на их использование за отдельную плату. Естественно, пользователи будут иметь возможность прикреплять к сервису и собственные домены. Другим источником монетизации сервиса может быть размещение рекламы в каталогах публичных ссылок и на появляющихся при переходе по ссылкам «страницах ожидания». Было бы интересно узнать ваше мнение о востребованности подобного сервиса.

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

  1. Adam Baburin

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

  2. Юлия

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

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

  3. Андрей

    Здравствуйте, а можно использовать G-Drive для редиректа внутри сайта? Например, пишется новая статья, которая размещается на новом адресе, после чего со старой ставится редирект на новую.

  4. Юлия

    Да, конечно. Причем вы можете использовать целевую ссылку упрощенного формата, начинающуюся с косой черты, например /article, или даже относительную ссылку, например article. Правда, в последнем случае желательно указать префикс / непосредственно в команде header и при этом не использовать в таблице ссылки другого формата, либо использовать для каждого формата отдельный модуль.

    Если у вас исходная ссылка – многокомпонентная, например /old/article, то вам необходимо создать таблицу site_old и категорию old так, как описано в статье.

    И, самое главное, нужно состыковать G-Drive с используемым вами движком, так как, судя по всему, для отображения статей вы используете не G-Drive. Для состыковки можно использовать «хак» примерно так, как описано в статье «WP-перенаправление со сменой post_id на postname».

  5. Юлия

    Добавила на сайт просмотр комментариев по адресам формата /comment/*, который является более сложным примером перенаправления в пределах одного сайта, чем описанный выше. Код модуля:

    <?php
    
    require INCLUDE_PATH.'query.php';
    require INCLUDE_PATH.'pagelink.php';
    require INCLUDE_PATH.'redirect.php';
    
    rotation01(1);
    
    // try
    
    if ($page['published'])
    {
      $pp = require PATH.'include/comments-per-page.php';
      $result = query("SELECT `id`,(SELECT COUNT(*) DIV {$pp}+1 FROM `site_comment` WHERE `id`<{$page['id']} AND `art`={$page['art']} AND `published`) `pn` FROM `site_categories` WHERE `art`={$page['art']}");
      $row = $result->fetch_assoc();
      $result->free();
      if ($row)
      {
        redirect(pagelink($row['pn'], $row['id'], '').'#'.$page['id']);
        return;
      }
    }
    error(404);
    

    Подключение модуля:

    INSERT INTO `site_categories` (`id`, `name`, `bits`, `module`) VALUES
    ('comment', 'Комментарии', 51, '');
    
  6. Guitaristka

    Привет, мне не весь сайт нужно пересылать через go.php, а некоторые ссылки с сайта выборочно. Которые я прописываю вручную.

    Данная пересылка делается для того, чтобы некоторые ссылки не индексировались.

  7. Михаил

    Скрипт можно состыковать с любым другим разными способами. Если будете брать, помогу настроить бесплатно. Для закрытия внешних лучше использовать минимум двухкомпонентные ссылки с префиксом вроде /go/ (и прописать в роботс Disallow: /go/). Также не помешает двойной редирект (см. два первых коммента к статье).

    P.S. Хостинг должен поддерживать не только PHP, но и MySQL, чтобы работал скрипт. Также для управления ссылками нужно что-то вроде phpMyAdmin, т.к. админки у нас дорогие. В принципе наличие всего вышеперечисленного – это практически стандарт для современного nix-хостинга (т.е. базирующегося на ОС Linux и т.п.), но мало ли.

  8. Михаил

    Несколько лет назад сделал «сайт» для коротких ссылок U75.RU, на котором собираю адреса со слагами, являющимися популярными IT-ключами, например:

    Размер поля id сделал больше, чтобы в нем можно было указывать и более сложные слаги, например u75.ru/domains-for-shortcuts – ссылка на один из комментариев к данной статье с осмысленным слагом.

    Также добавил несколько дополнительных полей, чтобы можно было потом сделать каталог, и поле для подсчета переходов по ссылкам.

  9. Михаил

    Для управления короткими ссылками можно вполне обойтись без Gency. Просто добавьте в базу данных первую показанную в статье таблицу и управляйте ссылками при помощи панели phpMyAdmin, которая есть практически на любом хостинге.

    G-Drive можно получить по ссылкам в предыдущем комментарии. Это достаточно простой скрипт, но его возможности гораздо шире, чем поддержка работы коротких ссылок. Расширяя его различными модулями, можно создать полноценный сайт. В нашем блоге много информации по данному скрипту. Загляните хотя бы в раздел G-Drive.

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

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