在iframing之前检测网址是否重定向

时间:2014-12-20 22:52:23

标签: php redirect iframe url-redirection

我正在构建一个应用程序,我在某些时候陷入困境,我正在使用iframe,它的来源是根据以下内容动态确定的:

<?php
ini_set('display_errors','off');
$file = $_GET['file'];
$url = ('remotedomain. com/' .$file);
?>

现在这里是iframe:

<iframe id="embed" src="<? echo $url; ?>"></iframe>

我坚持的观点是某个时候网址(iframe源代码重定向)重定向回主页,我想检测此重定向,如果发生这种情况,那么iframe的来源应该是肯定的url例如mysite .com / page1.html

3 个答案:

答案 0 :(得分:0)

使用curlCURLOPT_HEADER选项。它是这样的:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); //your url
curl_setopt($CURL, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (preg_match('#HTTP.{4} 30[34]#m', $result)) {
    if (preg_match('#\vLocation: (.*)\v#m', $result, $matches)) {
        echo "Found redirect: ", $matches[1], "\n";
    }
}

您可以使用Guzzle代替follow redirects

$response = $client->get('http://github.com');
echo $response->getStatusCode();
// 200
echo $response->getEffectiveUrl();
// 'https://github.com/'

getEffectiveUrl();将在此处打印重定向到的位置。

这样的事情:

function getFinalUrl($url) //in your library 
{
    $client = new GuzzleHttp\Client();
    $response = $client->get($url);
    if (in_array($response->getStatusCode(), [303, 304], true)) {
        $url = $response->getEffectiveUrl();
    }
    return $url;
}

iframe:

<iframe id="embed" src="<?=getFinalUrl($url);?>"></iframe>

答案 1 :(得分:0)

感谢所有与我讨论此问题的人我已经设法做到了,如果有人需要的话,这就是答案:

$url = (remote site .com/' .$file);
$start_time = microtime(TRUE);
$handle = curl_init($url);
curl_setopt($handle,  CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_NOBODY, 1);
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
if($httpCode == 302) {
$final_url = 'mysite .com/page1.php';
}
 else {
 $final_url = $url;
 } 

答案 2 :(得分:-1)

您可以使用以下javascript查找iframe的当前网址:

document.getElementById("iframe_id").contentWindow.location.href

您可以将此网址与您要避免的网页进行比较。如果匹配则将其重定向到备用网址