решил сделать партнерку, вот такого вида ссылка https://mysite.com/p644320/vip , где p644320 - это id того, кто привлекает, как мне при переходе на мой сайт обрабатывать этот id чтобы пользователь дальше перешел на страницу vip а не перенаправился на главную?
Можно с помощью регулярных выражений
$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 включительно.
Можно так
$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
Для начала, хочется сказать немного о структуре роутинга для подобных задач.
Ваш подход не совсем удобен, потому что вы собираетесь обрабатывать реферальную ссылку всего в одном месте, что не особо хорошо для реферера, который будет размещать ссылку на ваш ресурс.
Ведь задача реферера "заманить" человека на сайт любыми доступными способами, чтобы ему установилась кука и он зарегистрировался в дальнейшем на вашем ресурсе, а реферер с этого смог получать средства/бонусы и т.д. Он должен иметь возможность отправлять ссылки на любые ваши страницы со своей реферальной ссылкой.
Посмотрите на сотни других ресурсов, очень много ресурсов использует обычный 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
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть 2 известных плагина: WooCommerce, WP Job ManagerПри отображении списка вакансий или резюме в админке пользователя (Используется админка Woo) не работает...
Помогите разобраться в основах1 байт = 8 бит В 1 байте может максимум уместиться максимум 255 значений
Есть сайт на wordpressПодскажите, как можно сделать так, чтобы человек, который заходит на сайт мог оставлять заявки (через форму), которые бы не отсылались...