我在quora上发现了这个问题,并且不知道如何解决它
情景 -
用户在one.php上,点击指向two.php的链接
Two.php将标题重定向到three.php
如果我们检查三个引用网址.php $ _SERVER显示one.php而不是two.php
我们如何发现two.php是一个执行标题重定向的中间页?
请注意,我不能对one.php或two.php做任何事情,可以包含任何参数,说明重定向中包含two.php
答案 0 :(得分:3)
您可以将堆栈保存在会话变量中。只需保持不变的值到$_SESSION["history"]
,当集合增长到一定大小时,从数组的末尾删除项目。
例如:
// Need to do this if we wish to store data
session_start();
// Set the history array if it doesn't exist
isset( $_SESSION["history"] ) || $_SESSION["history"] = array();
// Push current URI onto history
array_unshift( $_SESSION["history"], $_SERVER["REQUEST_URI"] );
// Prevent history from exceeding 5 values
array_splice( $_SESSION["history"], 5 );
这需要添加到每个文件的顶部,或者添加到全局标题模板(如果有的话)。或者,如果你敢,你可以使用auto_prepend_file
全局加载它:
指定在主文件之前自动解析的文件的名称。包含该文件就像使用require函数调用它一样,因此使用了include_path。 - Documentation
您可以访问$_SESSION["history"]
:
// Output history array
var_dump( $_SESSION["history"] );
答案 1 :(得分:1)
因为您无法访问one.php或two.php,所以此处没有解决方法。由于two.php提供了重定向,浏览器会传递引用者,屏蔽two.php。这没有在RFC中指定,但它是客户端中的约定。
如果您确实有访问权限,则可以在查询中传递引荐来源网址,同时仍使用301.添加哈希或签名可用于验证网址。
答案 2 :(得分:0)
您可以使用会话或Cookie。您可能希望使用时间标记条目,并且只考虑具有非常接近的时间戳的条目。
答案 3 :(得分:-1)
您可以在从two.php到three.php的重定向中使用GET参数。
所以在two.php中:
header('Location:three.php?source = two.php');
然后在three.php中检查$ _GET ['source'];