所以我知道一般的经验法则是在 PHP 中进行标头重定向后,您应该调用 exit() 以避免运行额外的代码,但我想知道您是否将代码放在重定向标头之后,如果它会always run?
我正在对 Google Analytics 中跟踪推荐的各种方法进行一些研究,并发现了这篇文章:Google Analytics 提示与技巧 – 在 Google Analytics 中跟踪 301 重定向 http://www.zetainteractive.com/blog/2009/04/google-analytics-tips-tricks-tracking-301-redirects-in-google-analytics/
它建议这样做:
<?
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://www.new-url.com” );
?>
<script type=”text/javascript”>
var gaJsHost = ((“https:” == document.location.protocol) ? “https://ssl.” : “http://www.”);
document.write(unescape(“%3Cscript src=’” + gaJsHost + “google-analytics.com/ga.js’ type=’text/javascript’%3E%3C/script%3E”));
</script>
<script type=”text/javascript”>
try {
var pageTracker = _gat._getTracker(“UA-YOURPROFILE-ID”);
pageTracker._trackPageview();
} catch(err) {}</script>
从我一直理解 header() 函数的方式来看,它取决于浏览器,并且它可以随时运行重定向。因此,无法保证 JavaScript 在重定向发生之前实际上会开始或完成执行。
PHP 关于 header() 函数的文档 http://php.net/manual/en/function.header.php指示重定向后退出的原因是“确保重定向时不会执行下面的代码”。这听起来并不像他们保证所有后续代码都会运行,只是它可能会发生。
无论如何,我找到了一种不同的方法来实际管理跟踪,但我想看看是否可以找出 header() 在这种情况下到底是如何工作的。
感谢您的帮助。
在 PHP 中使用 header 函数只会添加服务器返回的响应的标头。它不会立即发送任何数据,也不会立即终止连接。后面的任何代码header
call will被处决。
特别是,即使在执行 301 重定向后添加响应正文也是一个好主意,以便不支持重定向的客户端也能获得一些描述性响应。事实上根据HTTP 1.1 规范 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 第10.3.2节 -
除非请求方法是 HEAD,否则响应的实体应该
包含一个简短的超文本注释,其中包含指向新 URI 的超链接。如果
收到 301 状态代码是为了响应除
GET 或 HEAD,用户代理不得自动重定向
请求,除非它可以被用户确认,因为这可能
更改发出请求的条件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)