Записать нажатую (внешнюю) ссылку на журнал веб-сервера или файл - PullRequest
2 голосов
/ 20 февраля 2020

У меня есть сайт, написанный на php. У меня есть много внешних ссылок, таких как:

<a href="http://example.com" target="_blank">

Что я хочу, так это то, что если пользователь нажимает на ссылки такого рода, он должен где-то это регистрировать. Предпочтительным является журнал apache. Если это невозможно, войдите в файл.

Как я могу это сделать (возможно, с js)?

1 Ответ

2 голосов
/ 20 февраля 2020

Простое решение получить его в журнале apache состоит в замене внешних ссылок на что-то вроде:

<a href="tracker.php?url=http://example.com" target="_blank>

, где tracker.php на вашем сервере и просто перенаправляет на внешний сайт:

header('Location: ' . $_GET['url']);

Это можно сделать вручную, или вы можете заменить ссылки на стороне клиента, используя jQuery, например:

$("a[target='_blank']").each(function(e){
  var href = $(this).attr("href"); 
  $(this).attr("href", "tracker.php?url=" + encodeURIComponent(href)); 
});

Fiddle из выше


В качестве альтернативы вы можете захватить событие click, используя jQuery и сделать запрос к вашему файлу tracker.php с целевым URL-адресом в качестве параметра запроса, а затем перенаправить:

<a href="http://example.com" target="_blank">test</a>

// Click event for a tags with target='_blank' attribute
$("a[target='_blank']").click(function(e){
  e.preventDefault(); // Prevent the default behaviour (the link opening)
  var href = $(this).attr("href"); // Get the href attribute of the clicked element

  // Make a get request to tracker.php passing the encoded href
  $.get("tracker.php?url=" + encodeURIComponent(href), function(data) {
    window.open(href); // Open the link in a new window once http request is complete
  });
});

Недостатки этого метода:

  • Правый щелчок + открытие в новой вкладке не будет зафиксировано (ни щелчки средней кнопкой мыши)

  • Во время http-запроса для пользователя будет небольшая задержка.

Управление с клавиатуры (фокус + клавиша возврата) будет зафиксировано.

Для того, чтобы любой из них работал, вам нужно убедиться, что apache настроен на запись запросов GET который, скорее всего, будет по умолчанию, что-то вроде:

0.0.0.0 - - [20 / Feb / 2020: 13: 15: 48 +0100] "GET /tracker.php ? url = http://example.com HTTP / 1.1 "200

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...