8

在我们的广告服务器上,我们使用以下简单的 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(不存在)。它似乎总是发生在第一次点击广告时;有时后续点击正确地遵循重定向,有时他们继续转到错误的 URL。

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

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

我捕获了失败和成功的重定向,除了日期之外,标题是相同的。

我使用的是Mac,所以我使用BrowserStack来测试IE,这限制了我在客户端的调试能力。有谁知道这可能是什么原因造成的,如果我们可以做些什么来解决它?

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

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

4

4 回答 4

1

添加exit或添加die();到 PHP 的末尾会有所不同吗?

有时 HTTP 客户端不喜欢在正文中仍然存在内容时发送重定向标头(即使它是空内容:空格、换行等)

于 2013-10-29T04:14:00.593 回答
0

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

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


header( $location ) ;
ob_flush();
?>
于 2013-10-25T05:14:45.277 回答
0

如果你使用会发生什么rawurldecode($lp)?我已经在 IE7-10 的 Windows 7 中进行了测试,它对我来说效果很好(两种方式)。奇怪的!

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

于 2013-06-06T03:07:33.093 回答
-1

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

希望这可能是问题

于 2014-11-02T10:23:59.750 回答