Парсить ссылку при переходе на сайт

153
31 января 2018, 15:15

решил сделать партнерку, вот такого вида ссылка https://mysite.com/p644320/vip , где p644320 - это id того, кто привлекает, как мне при переходе на мой сайт обрабатывать этот id чтобы пользователь дальше перешел на страницу vip а не перенаправился на главную?

Answer 1

Можно с помощью регулярных выражений

$str = 'mysite.com/vip/p644320';
preg_match('~(\pL{3})/(\pL\d+)~', $str, $arr);
list(, $vip, $id) = $arr;
var_dump($vip, $id);

И тогда можно парсить ссылки вида mysite.com/vip/p644320/page включительно.

Answer 2

Можно так

$url = "https://mysite.com/p644320/vip";
$parse = parse_url($url, PHP_URL_PATH);
$parse_arr = explode('/', $parse);

в $parse_arr[1] будет p644320 в $parse_arr[2] будет vip

Answer 3

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

Критика вашего подхода

Ваш подход не совсем удобен, потому что вы собираетесь обрабатывать реферальную ссылку всего в одном месте, что не особо хорошо для реферера, который будет размещать ссылку на ваш ресурс.

Ведь задача реферера "заманить" человека на сайт любыми доступными способами, чтобы ему установилась кука и он зарегистрировался в дальнейшем на вашем ресурсе, а реферер с этого смог получать средства/бонусы и т.д. Он должен иметь возможность отправлять ссылки на любые ваши страницы со своей реферальной ссылкой.

Посмотрите на сотни других ресурсов, очень много ресурсов использует обычный query параметр ?ref={id пользователя} и это в целом простое и правильное решение. Конечно, этот параметр раскрывает ID и может заставить человека попробовать ввести другое значение в это поле, в этом случае ресурсы принимают обычное хеширование или шифрование ID клиента, чтобы клиент не "игрался" этим параметром, но как правило в большем количестве случаев нет никакого смысла этим заниматься, а уж тем более с помощью перенаправления скрывать реферальную ссылку, потому что клиент который "жадный" и не хочет, чтобы с него получали прибыль, то он просто скопирует эту ссылку без реферальных элементов в URL.

Ведь намного проще, если это будет выглядеть вот так:

https://mysite.com/vip?ref=644320

Реализация подхода

Если вы решите использовать мой вариант, то вам достаточно просто получить query параметр и записать его клиенту в куку. Вы можете это делать средствами фреймворка, а можете делать через чистый PHP кодом вроде:

<?php 
  $ref = $_GET['ref'];
?>

При использовании вашего подхода, я рекомендую вам использовать фреймворки (Symfony, Laverel, и т.д) или библиотеки для маршрутизации, которые позволяют с помощью аннотаций решить данную проблему в несколько строчек кода.

 /**
 * @Route("/{clientId}/vip", requirements={"clientId" = "^p[0-9]+$"})
 * @Method("GET")
 */

Представленная вами структура ссылки не совсем корректна (https://mysite.com/p644320/vip), потому что подобные страницы с динамическими идентификаторами в самом начале могут пересекаться со статичными маршрутами. Например, vip/{clientId} удобнее с точки зрения количества перебираемых маршрутов и логический отделяет раздел vip с параметром от остальных разделов.

Если без изменений писать предложенный вами вариант на чистом PHP, то это будет выглядеть вот так:

if (preg_match('/^\/(p[0-9]+)\/vip$/', $_SERVER['REQUEST_URI'])) {
   //Отправить заголовки Cookie или Location
} 
READ ALSO
запрос POST с сервера Node.js для PHP

запрос POST с сервера Node.js для PHP

Товарищи, скажите что делаю не так?

182
WooCommerce+WP Job Manager в My Account не работает pagination

WooCommerce+WP Job Manager в My Account не работает pagination

Есть 2 известных плагина: WooCommerce, WP Job ManagerПри отображении списка вакансий или резюме в админке пользователя (Используется админка Woo) не работает...

199
Конвертер систем счисления на php?

Конвертер систем счисления на php?

Помогите разобраться в основах1 байт = 8 бит В 1 байте может максимум уместиться максимум 255 значений

159
Как сделать так, чтобы человек мог оставлять заявки на сайте которые были бы видны остальным?

Как сделать так, чтобы человек мог оставлять заявки на сайте которые были бы видны остальным?

Есть сайт на wordpressПодскажите, как можно сделать так, чтобы человек, который заходит на сайт мог оставлять заявки (через форму), которые бы не отсылались...

141