Действия (Редиректы)

Список действий

  • HTTP редирект — редирект через передачу HTTP-заголовка «302 Found»;
  • JS-редирект — сгенерируется javascript-код, который перенаправит пользователя
  • Meta-редирект — редирект с использованием тега meta;
  • Двойной meta-редирект — редирект состоит из двух этапов: редирект на gateway.php, затем на конечный адрес.
  • Редирект с пустым реферером — выполняется js-код, который очищает реферер в браузере;
  • Открыть во фрейме — генерация фрейма с запрашиваемой страницей;
  • CURL — целевой адрес будет загружен сервером и выведен в браузере (физического редиректа не происходит, серфер остается на TDS);
  • 404 NotFound — показывает пустую страницу со статусом «404 Not Found»;
  • Отправить в группу — переход в группу (в URL указывается ID группы);
  • Отправить в поток — переход в поток (в URL указывается ID потока), при этом уже не учитываются фильтры этого потока;
  • Показать текст — вывести на странице текст;
  • Показать как HTML-страницу — Сгенерируется HTML-страница. В body будет содержимое, написанное ниже.
  • REMOTE — загружает указанную страницу, берет с неё URL и уже на этот URL отправляет посетителя (значение кешируется на 2 минуты);
  • FormSubmit — создается html форма и сразу через javascript сабмитится;
  • Редирект для iframe — используйте, TDS подгружается через тег <iframe>;
  • Редирект для Script — используйте, если TDS подгружается через тег <script>;
  • SubId —возвращает SubId, используется в режиме Трекинг.

Совместимость действий с различным способами подключения кампании

Действие Ссылка Script Iframe/Frameset
HTTP-редирект Редирект Выполнение js-кода Редирект внутри фрейма
Js-редирект Редирект Не работает Редирект внутри фрейма
Meta-редирект Редирект Редирект Редирект
Двойной Meta-редирект Редирект Редирект Редирект
Ред. с пуст. реферером Редирект Редирект Редирект внутри фрейма
Открыть во фрейме Показ фрейма Не работает Фрейм внутри фрейма
CURL Показ страницы Выполнение js-кода Страница внутри фрейма
404 NotFound Ошибка 404 Ничего Пустой фрейм
Показать текст Показ текста Исполнение как js код Текст внутри фрейма
Показать HTML Показ страницы Показ рядом с тегом script Показ внутри фрейма
REMOTE Редирект Редирект Редирект
FormSubmit Редирект Не работает Редирект внутри фрейма
Редирект для iframe Не работает Не работает Редирект основной страницы
Редирект для script Не работает Редирект Не работает
SubId Показ subid Не работает Показ subid во фрейме

Какой редирект скрывает источник?

Читайте на странице Скрытие реферера.

Какой редирект с наименьшей вероятностью приведет к бану сайта?

Наиболее безопасными считается iframe/script редирект и обращение напрямую к API, но стопроцентной защиты от санкций поисковиков не существует.

Почему переданный в CURL реферер не видит Яндекс.Метрика и Google Analytics?

CURL - это серверная библиотека, которая позволяет загрузить содержимое удаленной страницы. Во время запроса можно передавать свой реферер, его увидит удаленный сервер. Сервисы аналитики смотрят реферер в браузере, и часто этот реферер от сайта до перехода на TDS.

Создание редиректа

Для примера создадим новый редирект через Meta Refresh. Создайте файл /application/redirects/meta.php. Имя файла должно совпадать с именем класса, только без «_redirect».

<?php
/**
 * @redirectName Meta
 * @redirectWeight 100
 */
use \Models\Stream;
use \Models\Visitor;
class meta_redirect extends BaseRedirect
{
	public function execute(Stream $stream, Visitor $visitor)
	{
                $code = '<html>
                <head><meta http-equiv="REFRESH" content="1; URL=\'#url#\'"></head>
                <body>
                  The Document has moved <a href="#url#">here</a>
                </body>
                </html>';
 
                $code = str_replace('#code#', $stream->getUrlWithParams($visitor), $code);
		$this->setContent($code);
	}
 
	public function debugExecute(Stream $stream, Visitor $visitor)
	{	
		return 'Meta: ' . $stream->getUrlWithParams($visitor);
	}
 
        public function decorate(Stream $stream)
        {
               return 'Meta' . $stream->getUrl();
        }
}

Шаблон

<?php
/**
 * @redirectName Новый редирект
 * @redirectWeight 100
 */
use \Models\Stream;
use \Models\Visitor;
class myredirect_redirect extends BaseRedirect
{
    // Метод выполнения редиректа или действия
    public function execute(Stream $stream, Visitor $visitor) 
    {
        // Здесь сам алгоритм редиректа, php-код
    }
 
    // Выполнение редиректа или действия в режиме отладки
    public function debugExecute(Stream $stream, Visitor $visitor)
    {	
         return "Redirecting to: " . $stream->getUrlWithParams($visitor);	
    }	
 
    public function decorate(Stream $stream)
    {
         return 'MyRedirect' . $stream->getUrl();
    }
}

Не используйте функцию header() в коде, вызывайте $this->addHeader('...').

Какие методы доступны в коде редиректа

  • $this->addHeader($string) — добавить строку в http-заголовок;
  • $this->setContent($string) — вывести текст;

Какие методы доступны в $stream и $visitor?

Читайте на страницах методы Visitor, Методы Stream.

Как установить скрипт редиректа?

Загрузите его в директорию application/redirects.

Как добавить код ремаркетинга или метрики?

Необходимо создать свой скрипт-редиректа, на базе одного из существующих: js.php, frame.php, formsubmit.php.

Рассмотрим на примере добавления пикселя FaceBook.

Создайте файл application/redrects/remarketing.php. С кодом:

<?php
/**
 * @redirectName REMARKETING
 * @redirectWeight 2
 */
use Models\Stream;
use Models\Visitor;
class remarketing_redirect extends BaseRedirect
{
  public function execute(Stream $stream, Visitor $visitor)
  {
    $this->setContent($this->_getJavascriptRedirect($stream, $visitor));
  }
 
  public function debugExecute(Stream $stream, Visitor $visitor)
  { 
    return 'REMARKETING: ' . $stream->getUrlWithParams($visitor);
  }
 
  public function decorate(Stream $stream)
  {
    return 'REMARKETING: ' . $stream->getUrl();
  }
 
  private function _getJavascriptRedirect(Stream $stream, Visitor $visitor)
  {
    $remarketing = <<<EOF
    <!-- Код ремаркетинга -- >
 
    <!-- Facebook Pixel Code -->
    <script>
    !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
    n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
    document,'script','https://connect.facebook.net/en_US/fbevents.js');
 
    fbq('init', '1914721942087471');
    fbq('track', "PageView");</script>
    <noscript><img height="1" width="1" style="display:none"
    src="https://www.facebook.com/tr?id=1914721942087472&ev=PageView&noscript=1"
    /></noscript>
    <!-- End Facebook Pixel Code -->
EOF;
 
    $code = '<html>
    <head>
        ' . $remarketing . '
        <meta http-equiv="REFRESH" content="1; URL=\'' . $stream->getUrlWithParams($visitor) . '\'">            
        <script type="text/javascript">window.location = "' . $stream->getUrlWithParams($visitor) . '";</script>
    </head>
    <body>
        The Document has moved <a href="' . $stream->getUrlWithParams($visitor) . '">here</a>
    </body>
    </html>';
 
    return $code ;
  }
}

Как сократить время обновления ссылки в REMOTE?

Отредактируйте файл application/redirects/remote.php.

Выставите нужное значение в строке

protected $_ttl = 60

Сохраните файл и выставите атрибуты 666 на него, чтобы он не перезаписался во время обновления.

В каком формате должна быть ссылка для действия REMOTE?

Полная ссылка, без какого-либо оформления:

http://domain.com/page

или домен

domain2.com

Скрипт ротатор для REMOTE

<?php
if (!file_exists('./links.txt')) {
    die('No file links.txt');
}
$content = file_get_contents('./links.txt');
$lines = explode("\n", $content);
$links = array_map(function($line){
  $line = trim($line);
  return empty($line) ? null : $line;
}, $lines);
$links = array_filter($links);
echo $links[rand(0, count($links) - 1)];
?>

Создайте в директории скрипта файл links.txt со списком линков по одному в строке.