在PHP中获取Referer URL和FOLDER名称

时间:2014-02-17 21:28:55

标签: php http-referer

我的域中有几个文件夹,每个文件夹中都包含一个index.php文件,用于检查数据库连接是否通过,如果失败,页面将被重定向到顶级文件(在所有文件夹之外) )名为offline.php。这部分效果很好。如果数据库脱机,我用来重定向的基本格式是:

if ( !$dbconnect ) {
header("Location: https://www.test.com/offline.php");
}

然后,在offline.php页面中,我需要检查哪个文件夹将用户带到offline.php页面,并根据使其脱机的文件夹向用户显示唯一的消息。 php页面。

例如:

test.com/test1/index.php重定向到offline.php,消息会说'test1带你到这个页面'

test.com/test2/index.php重定向到offline.php,该消息会说“test2将您带到此页面”。

在多个浏览器中,我尝试了以下代码,这些代码总是导致“未知的uri”:

$url = 'https://' . $_SERVER['HTTP_REFERER'] ;
if ( strpos($url,'test') !== false ) {
echo 'test';
} elseif ( strpos($url,'test1') !== false ) {
echo 'test1';
} elseif ( strpos($url,'test2') !== false ) {
echo 'test2';
} else {
echo 'unknown uri';
}

建议?

修改 由于HTTP_REFERER的不可靠性,我决定将所有条件放在index.php页面中,而忘记了offline.php页面。非常感谢所有提出建议的人!

2 个答案:

答案 0 :(得分:1)

为什么要使用重定向?它们在服务器上很重,很慢而且只是普通的旧的不必要的。使用switch语句并拥有1个控制页面而不是多个文件夹和页面。

答案 1 :(得分:0)

如果您在offline.php页面上使用以下代码,则可以看到所有可用的$ _SERVER变量(引用URL就在那里)

echo '<pre>',print_r($_SERVER),'</pre>';

从那里,您可以使用$ _SERVER ['HTTP_REFERER']使用选择案例,或者如果那样声明并完成您的目标。

根据评论中的一些问题以及指出使用$ _SERVER ['HTTP_REFERER']不可靠的人,你可以做一些类似的事情。

在带有dbconnect检查的index.php页面上,您可以将其修改为类似的内容。 header("Location: https://www.test.com/offline.php?org=".urlencode($_SERVER['REQUEST_URI']));

然后,在offline.php上,

$page = urldecode($_GET['org']);  
$org = explode('/',$page);

回显$ org [1]得到斜杠后的第一个值,$ org [2]会得到下一个值等。