【问题标题】:Redirect randomly failing in IE 8 and older在 IE 8 和更早版本中重定向随机失败
【发布时间】:2013-06-01 22:02:32
【问题描述】:

在我们的广告服务器上,我们使用以下简单的 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

【问题讨论】:

  • 这个网址是不是通过电子邮件发送的?
  • 这可能与您的问题无关,但我很好奇 - 您的 IE8 运行在什么渲染模式下?怪癖还是标准模式?我在 IE8 的 quirks 模式下遇到了一些奇怪的东西。
  • @Dagon 不,这是一个锚的 href,其内部 HTML 是广告图片。但是我已经在 BrowserStack 重现了这个问题,只需在浏览器中输入 URL。
  • @Revent Quirks 模式在 BrowserStack 上默认是关闭的,我相信。

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


【解决方案1】:

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

在 IE 中检查你被重定向到的 URL,地址栏是什么意思?

【讨论】:

    【解决方案2】:

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

    <?php
    ob_start(); //at the top of the page//
    
    
    header( $location ) ;
    ob_flush();
    ?>
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我不知道我们是否仍然遇到问题(多年来没有人向我抱怨过),但我决定实施这样的事情。我没有添加exit(),而是删除了?&gt; 行,因为它后面有一个正在打印的换行符。
      【解决方案4】:

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

      希望这可能是问题

      【讨论】:

      • 不,没有输出缓冲。
      猜你喜欢
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      相关资源
      最近更新 更多