chrome中不止一个标头不起作用 - php

时间:2011-05-31 08:35:34

标签: php header http-headers

我使用PHP来跟踪所有mailto链接的点击次数,方法是将mailto:重写为我的脚本,然后设置引用页面的标题。 最初我只是:

header("location: mailto:email@address.com");

...但这在IE8中有不良影响:它会打开2个电子邮件窗口。所以,在我尝试解决这个问题时,我现在正在使用:

header("Status: 200");
header("location: http://mypage.com"); 
header("Refresh: 0; url=mailto:email@address.com"); 

这在IE中运行良好但不是Chrome。我把那里的“地位”扔到那里希望解开这个谜团。

除了检测浏览器并发出不同的命令外,还能做什么呢?

5 个答案:

答案 0 :(得分:3)

位置标题应附有30X状态代码(如302),而不是200。

答案 1 :(得分:0)

检查出来> http://php.net/manual/en/function.header.php

特别是那两部分:

  

第二个特例是   “位置:”标题。不仅如此   将此标题发送回浏览器,   但它也返回REDIRECT(302)   状态代码到浏览器,除非   201或3xx状态代码已经存在   已经确定。

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

您同时发送200和302,而且您没有遵循exit;规则。

您可以使用我的建议(尤其是exit;部分)。

<强> !!!注意!!! 过去有一个错误,如果先没有设置header("Status: 200");,Chrome会无法正常工作,但不确定它是否已修复。

答案 2 :(得分:0)

在这里使用一些AJAX来处理你的问题可能会更好,如果你要使用AJAX,那么使用JQuery就更容易了

首先,虽然mailto不再是网络上的首选方法,但它过于笨重并且依赖于设置用户的默认电子邮件客户端,在大多数情况下你不能依赖它。

所以要解决有一个风格看起来像你的按钮的链接。

一旦你有这个使用JQuery将ajax请求发送到执行计数的PHP脚本,然后如果你希望在收到时通过重定向处理成功(我只包括它,因为我不确定你的重定向实现了什么)。

它干净快速,用户不会注意到除了您的网站之外的差异可能会经历速度增加:)希望这有帮助

答案 3 :(得分:0)

标题位置会重定向浏览器,因此会忽略其他标题。您应始终将此标头作为最后一个发送。在发送重定向后,执行任何PHP代码也不是一个好主意。

你可能想这样做:

在第一页:

header("Status: 200");
header("location: http://mypage.com"); 
exit();

http://mypage.com

header("Refresh: 0; url=mailto:email@address.com"); 

答案 4 :(得分:0)

关于chrome的奇怪之处:它接受以下标题刷新。

<meta http-equiv="refresh" content="4; url=page.php" />
<button value="go further">

我为不支持任何类型标题刷新的浏览器在此次刷新下方放置了一个按钮。