在IE 8及更早版本中重定向随机失败

时间:2013-06-06 02:39:11

标签: php redirect internet-explorer-8 internet-explorer-7

在我们的广告服务器上,我们使用以下简单的PHP脚本重定向到广告的着陆页:

<?php
$lp=array_key_exists('lp',$_REQUEST)?trim($_REQUEST['lp']):"";
$location = sprintf('Location: %s', $lp ) ;
header( $location ) ;
?>

脚本获取其lp参数并重定向到该URL。目的是我们可以扫描访问日志以跟踪点击次数(URL还包括一个id参数,脚本忽略该参数)。

我们有一个客户(我知道到目前为止)这种情况并不一致,但仅限于IE 8及更早版本。有问题的网址是:

http://webutil.bridgebase.com/v2/ad_lp.php?id=340&lp=http%3A%2F%2Ftravelinsingles.com%2Fhome.htm

这应该重定向到http://travelinsingles.com/home.htm,但有时会转到http://webutil.bridgebase.com/home.htm(不存在)。它似乎总是在第一次点击广告时发生;有时后续点击会正确跟随重定向,有时他们会继续转到错误的网址。

我在网络服务器上执行了数据包捕获,看起来我们正在发送正确的标头:

HTTP/1.1 302 Moved Temporarily
Server: nginx/1.2.1
Date: Thu, 06 Jun 2013 01:39:12 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.4.15-1
Location: http://travelinsingles.com/home.htm

我在失败和成功的重定向上捕获了两个,除了Date之外,标题是相同的。

我正在使用Mac,所以我使用BrowserStack来测试IE,这限制了我在客户端的调试能力。有谁知道造成这种情况的原因,如果有什么我们可以解决的问题呢?

我用BrowserStack的截图功能重现了这个问题:

http://www.browserstack.com/screenshots/3659c3b992a1738594d2fd370caef2852fecb3fa

4 个答案:

答案 0 :(得分:1)

在PHP的末尾添加exitdie();会有所不同吗?

有时HTTP客户端在发送重定向标题时不喜欢它,而内容仍然存在于正文中(即使它是空的内容:空格,行返回等)。

答案 1 :(得分:0)

如果您使用rawurldecode($lp)会怎样?我在IE7-10中测试了Windows 7,它对我来说很好(两种方式)。奇怪!

检查您在IE中重定向到的网址,地址栏说的是什么?

答案 2 :(得分:0)

为了防止标题重定向问题,我通常使用ob_start();和ob_flush();

<?php
ob_start(); //at the top of the page//


header( $location ) ;
ob_flush();
?>

答案 3 :(得分:-1)

也许你在服务器上有输出缓冲。由于缓冲区,输出缓冲可以使标头输出(如您所知,应首先发送标头)。

希望这可能是问题