Здравствуйте, хорошие разработчики,
Это не повторяющиеся вопросы, так как я изучал каждый результат Stack Overflow, прежде чем помещать его сюда.
Я хочу отследить маршрут перенаправления URL-адреса, значит даже если они используют перенаправления 301, 302 .., мета-ссылку sh или javascript местоположение замените et c. Я хочу знать все промежуточные URL-адреса между исходным URL-адресом и эффективным URL-адресом.
Так, например, мой URL-адрес - example.com -> 301 - example2.com -> 302 -> example3.com -> meta refre sh -> example4.com -> 307 example5.com -> javascript redirect - example6.com ....
Я хочу, чтобы все перенаправления URL были записаны. точно так же, как https://wheregoes.com/retracer.php
Я смог собрать некоторый код и преодолеть перенаправление заголовка и мета-ссылку sh перенаправление, используя код ниже
function followCurl($url, $httpcode='301', $maxRedir = 1, $urlTrace){
$rawUrl = $url;
while( preg_match('/301|302/i', $httpcode) and $maxRedir <= 5 ){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$resp = curl_exec($ch);
$cginfo = curl_getinfo($ch);
$httpcode = $cginfo['http_code'];
preg_match_all('/^Location:(.*)$/mi', $resp, $redir);
$url = !empty($redir[1]) ? trim($redir[1][0]) : "";
if($httpcode){
if(empty($url)){
$url = $rawUrl;
}
$urlTrace[] = [
'code' => $httpcode,
'url' => $url,
'data' => $resp,
];
}
curl_close($ch);
$maxRedir++;
}
if( $redirect_count = count($urlTrace) ){
--$redirect_count;
$finalLink = end($urlTrace);
$finalurl = $finalLink['url'];
if( !checkIfContainsDomainName($finalurl) && isset($urlTrace[$redirect_count]) ){
$secondLast = $urlTrace[$redirect_count-1];
$secondUrl = $secondLast['url'];
$lastDomain = parse_url($secondUrl);
if($lastDomain){
$finalurl = $lastDomain['scheme'].'://'.$lastDomain['host'].$finalurl;
$urlTrace[$redirect_count]['url'] = $finalurl;
}
}
if(!isset($urlTrace[$redirect_count]['data'])){
return $urlTrace;
}
$finalData = $urlTrace[$redirect_count]['data'];
if(strpos( $finalData, "http-equiv='refresh'" )){
$metaUrl = pluckurl($finalData);
if($metaUrl){
$urlTrace[] = [
'code' => 'meta_refresh',
'url' => $metaUrl,
];
return followCurl($metaUrl, '301', 1, $urlTrace);
}
}
}
return $urlTrace;
}
Но теперь Я не знаю, как мне добавить сюда javascript лог обнаружения перенаправления c.