我正在构建一个应用程序,我在某些时候陷入困境,我正在使用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
答案 0 :(得分:0)
使用curl和CURLOPT_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
您可以将此网址与您要避免的网页进行比较。如果匹配则将其重定向到备用网址