【发布时间】:2011-11-07 17:31:38
【问题描述】:
我在这里找了一段时间,找不到我的具体问题的答案。
在我网站上的 100 个位置中,我通过标头位置重定向重定向到错误页面。
header("Location: /error.php");
我想要做的是在 error.php 页面上捕获并记录 HTTP_REFERER,但由于某种原因它没有设置。我已经看到了为什么没有使用 Meta-refresh 设置它的解释,但是位置标头是 302,所以应该设置正确吗?有什么想法吗?
请注意:我知道 HTTP_REFERER 是不可靠的,我知道我可以单独传递信息。在我的场景中,这两者都不重要(除非我想更改调用重定向的所有位置)。
【问题讨论】:
-
一个问题是您不应该为
Location:标头使用相对路径。 RFC2616 说明位置标头:The field value consists of a single absolute URI。您必须使用新位置的绝对路径。您可以从$_SERVER['HTTP_HOST']和$_SERVER['PHP_SELF']动态计算此值,例如在这种情况下header('http://'.$_SERVER['HTTP_HOST'].'/error.php'); -
@DaveRandom - 谢谢 - 它确实有效
-
虽然“它对您有效”,但它可能对其他人无效。重定向是否适用于相对路径取决于客户端/浏览器。是的,一些客户端确实使用相对路径,但规范统计它应该是一个绝对 URI(正如 @DaveRandom 指出的那样),所以一些客户端可能不那么适应。
-
仅供参考,服务器变量拼写为 HTTP_REFERER 而不是 HTTP_REFERRER。见php.net/manual/en/reserved.variables.server.php
标签: php http-redirect