显示3个请求的单个页面(也打印标题)

在我的工作室有人在几年前devise了一个网页,现在客户决定更换服务器(他转移到运行Gen2 SMP的Linux Apache服务器,64位,PHP版本5.3.8,标准MYSQL版本5)。 它突然开始做奇怪的事情。

点击需要login的链接时,页面会使用PHP中的header()函数将您redirect到login页面。 奇怪的是,页面显示这个:

服务器遇到内部错误或configuration错误,无法完成您的请求。 请联系服务器pipe理员,[没有给出的地址],并通知他们错误发生的时间,以及你可能已经做了什么可能导致错误。 有关此错误的更多信息可能在服务器错误日志中可用。 HTTP / 1.1 200 OKdate:2012年10月15日星期一17:27:32 GMT服务器:Apache / 2.2.22(Unix)FrontPage / 5.0.2.2635 X-Powered-by:PHP / 5.3.8 Expires:Thu,11月19日1981 08:52:00 GMT Cache-Control:no-store,no-cache,must-revalidate,post-check = 0,pre-check = 0 Pragma:no-cache Keep-Alive:timeout = 5,max = 399连接:保持活动传输编码:分块的内容types:文本/ HTML 232C

然后,页面本身,然后,另一个标题:

0 1f4

服务器遇到内部错误或configuration错误,无法完成您的请求。 请联系服务器pipe理员,[没有给出的地址],并通知他们错误发生的时间,以及你可能已经做了什么可能导致错误。 有关此错误的更多信息可能在服务器错误日志中可用。 0

最有趣的是,如果你刷新页面或按下inputURL,它会正确加载。 我一直在检查日志,它只归咎于一个不起眼的图标。 我也检查了.htaccess,一切都是正确的(RewriteBase是/按照意图,唯一的东西有另一个移动^ en /请求的规则?lang = en。有没有人遇到类似的东西?

编辑 :IE不会触发这两个标题。 这变得越来越诡异。

解决scheme! :正如@a​​daptr指出,这是一个PHP的问题,而不是任何服务器相关的事情。 最后的编码器(我知道指责前任是不礼貌的,但是这种情况花了我太多的时间)是这样做的:

 /* config.php -> included everywhere as a bootstrap*/ // ... constant/mysql setup if($notLogged) { $forward = ...;//previous url header("Location: ".WWW.LANG."/customer-area/login/index.php?forward=".$forward); exit; } 

在看得更深之后,有些东西扭曲了我: exit; 会正确地发送标题,或不会? 当然,除去那个exit; 会继续执行页面(我知道这是不正确的,这就是为什么我没有尝试之前)。 但是,如果标题没有完全发送,可能会导致任何问题(我不是一个服务器的人,我不知道这一点,对不起队友)。 删除该exit; 电话,页面被正确地形成,标题被“closures”(因为输出开始),并且所有的齿轮开始再次移动。 谢谢大家,最好的奖励100分=)

如果apache日志没有显示任何错误,那就意味着PHP处理了所有这些,并且也向客户端返回了奇怪的响应。

启用适当的PHP日志logging,并调查它正在做什么。

响应中的这一点是指示性的:

传输编码:分块

这意味着PHP正在(header)中定义没有内容大小的(text / html)stream中发送响应。

这可能会导致任何头部输出(经常PHPcaching的东西,即它是乱序生成的),即使有一点点滑动,导致客户端认为正在发送新的页面。

这只是一个可能的原因; 正确的PHP日志会告诉你更多。

您需要debugging页面代码,而不是查看服务器的原因。 我可以从你发布的是使用FrontPage(真的是一个专业人士使用的?)创build的,所以它不可避免地包含在非Microsoft平台上无法正常工作的代码。 通过删除所有Microsoft特定的代码修复代码,它可能会正确运行。