如何使用php检测重定向中的所有页面?

时间:2012-05-31 19:15:59

标签: php redirect http-headers

我在quora上发现了这个问题,并且不知道如何解决它

情景 -

用户在one.php上,点击指向two.php的链接

Two.php将标题重定向到three.php

如果我们检查三个引用网址.php $ _SERVER显示one.php而不是two.php

我们如何发现two.php是一个执行标题重定向的中间页?

请注意,我不能对one.php或two.php做任何事情,可以包含任何参数,说明重定向中包含two.php

4 个答案:

答案 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 );

将其加载到所有PHP文件

这需要添加到每个文件的顶部,或者添加到全局标题模板(如果有的话)。或者,如果你敢,你可以使用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'];