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

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

Создайте в каталоге mods вашего сайта файл go.c.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.c.php следующего содержания:

<?php error(404);

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

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

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

Комментарии: 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_once INCLUDE_PATH.'find.php';
    require INCLUDE_PATH.'pagelink.php';
    require INCLUDE_PATH.'redirect.php';
    
    // try
    
    if ($page['published'])
    {
      $pp = config('comments-per-page');
      $row = findOrFail("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']}");
    
      rotation01(1);
      redirect(pagelink($row['pn'], $row['id'], '').'#'.$page['id']);
    }
    else
      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. Юлия

    При покупке или аренде домена в сервисе парковки доменов подписка G-Drive, включая получение последней версии, предоставляется бесплатно (по запросу).

  10. Михаил

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

    А я перенес свои короткие ссылки в сервис парковки. Буду тестировать его панель управления. Из минусов: завершающие слеши теперь не убираются автоматически, например короткая ссылка u75.ru/domains-for-shortcuts/ уже работать не будет. К регистру букв в ссылках сервис не чувствителен, но мне сказали, что это зависит от конкретного парковочного сервера, т.е. на другом сервере может быть по-другому.

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

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