В PHP для перехвата редиректа и определения способа его выполнения можно использовать различные подходы и функции.
1. Использование функции curl_getinfo():
Для этого необходимо использовать библиотеку cURL. Функция curl_getinfo() позволяет получить информацию о запросе, включая URL-адрес и код состояния (статус) ответа. В случае перенаправления, возвращается информация о последнем перенаправлении.
Пример кода:
$ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); $redirectUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); echo "Перенаправление произошло на URL: " . $redirectUrl; echo "Код состояния: " . $httpCode;
2. Использование функции get_headers():
Данная функция позволяет получить заголовки ответа сервера, включая информацию о перенаправлениях. Если указан дополнительный аргумент true, то функция вернет массив с заголовками. Мы можем использовать полученный массив для определения способа и URL-адреса перенаправления.
Пример кода:
$headers = get_headers($url, 1); if (isset($headers['Location'])) { $redirectUrl = $headers['Location']; if (is_array($redirectUrl)) { $redirectUrl = end($redirectUrl); } echo "Перенаправление произошло на URL: " . $redirectUrl; }
3. Использование функции header():
Если вы хотите перехватить редирект на сервере, вы можете использовать функцию header(). Она позволяет отправить заголовки ответа серверу. Если на сервере установлено перенаправление с помощью этой функции, то вы можете получить URL-адрес перенаправления.
Пример кода:
ob_start(); header("Location: " . $url, true, 301); ob_get_clean(); $redirectUrl = $_SERVER['HTTP_REFERER']; echo "Перенаправление произошло на URL: " . $redirectUrl;
При использовании любого из этих подходов, вы сможете перехватить редирект и узнать URL-адрес перенаправления. Дополнительно, можно также получить код состояния (статус) ответа, который указывает на успешность перенаправления.