Первую ссылку можно расшифровать без перехода по ней.
Потом выполнять запросы с выключенным CURLOPT_FOLLOWLOCATION.
Естественно надо проверять на ошибки и возможно зациклить.
<?php
function get_location($ch, $output){
$curl_info = curl_getinfo($ch);
$headers = substr($output, 0, $curl_info["header_size"]); //split out header
preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches);
return $matches[1];
}
$link = "https://vk.com/away.php?to=https%3A%2F%2Fvk.cc%2F8L3cD8&post=-75604109_25935&cc_key=";
$arr = parse_url($link);
parse_str($arr['query'], $output);
$vk_cc_link = $output['to'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $vk_cc_link);
// Я задал эти параметры, потому что у меня на локалхосте не настроен SSL
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$link = get_location($ch, $output);
$arr = parse_url($link);
parse_str($arr['query'], $out);
$new_link = $out['to'];
curl_setopt($ch, CURLOPT_URL, $new_link);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
$output = curl_exec($ch);
$link = get_location($ch, $output);
echo $link;
?>
Должно вывести:
https://boom.ru/redirect/album/6101146?web=1