2014-02-17 50 views
0

我在我的域中有几个文件夹,每个文件夹内包含一个index.php文件,用于检查数据库连接是否通过或失败,如果失败,页面被重定向到顶级文件(在所有文件夹之外)称为offline.php。这部分工作很好。我使用的是如果db是脱机重定向的基本格式是:在PHP中获取引用URL和文件夹名称

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

然后,offline.php页面中,我需要检查,看看哪个文件夹所带来的用户对offline.php页,并根据将他们带到offline.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页面。巨大的谢谢大家谁提出了建议!

+0

我看到你已经添加了一些东西,因为我早些时候回答。当你只是回显$ _SERVER ['HTTP_REFERER'],会发生什么? – OrganizedChaos

+0

没有显示,只是一个空白页。 – user1172854

+0

$ _SERVER ['HTTP_REFERER']不可靠,请谨慎使用 – 2014-02-17 22:05:02

回答

0

如果您offline.php页面上使用下面的代码,你可以看到所有的$ _ SERVER变量可用(指URL是在那里)

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

从那里,你可以采取$ _ SERVER [ 'HTTP_REFERER']使用选择大小写,或者如果然后声明并实现您的目标。

根据你在评论中的一些问题和人们指出使用$ _SERVER ['HTTP_REFERER']不可靠,你可以改为这样做。

在你的index.php页面上用dbconnect检查,你可以修改它是这样的。 header("Location: https://www.test.com/offline.php?org=".urlencode($_SERVER['REQUEST_URI']));

然后,在offline.php,

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

回声$组织[1]得到斜线后的第一个值,$组织[2]将获得下一个值等。

+0

刚刚尝试过,但引用网址未包含在列表中,是否应该列出? – user1172854

+0

这取决于浏览器。在某些浏览器中,引用者是执行重定向的页面,而在其他浏览器中,则是通过重定向链接到页面的页面。 – Barmar

+0

查看http://stackoverflow.com/questions/2158283/will-a-302-redirect-maintain-the-referer-string – Barmar

1

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