2016-03-31 34 views
1

我正在寻找一种方法来重定向所有未从特定目录中的任何文件登录的用户。我有一个目录叫admin如果未登录,PHP重定向用户

唯一登录的用户是我自己。

我使用这样的脚本来检查我是否登录,如果没有,然后重定向。

if(isset($_SESSION['user']) { 
if($_SESSION['user'] == "username") { 
    echo "Welcome, " . $_SESSION['user']; 
} 
else { 
header("Location: index.php"); 
} 
} 

很简单。非常直截了当。不需要额外的安全性,因为我没有处理任何敏感数据,而且我的管理页面不会影响我的网站运行方式。

但是我怎么能创建一个重定向来检查该特定的admin目录?

此脚本位于我的functions.php文件中,该文件包含在每个页面中,因此我需要一种方法来排除除该目录以外的每个文件,或者如果可以使用数组并仅列出除非已记录日志才能查看的页面英寸

随着一些调整,我想这样的事情会工作。

问题是如果我有两个index.php文件?一个用于主目录,一个用于我的子目录?

我在脚本中包含了$directory = "admin/";,但我不确定如何将它工作到只有在那些文件在该目录中时才重定向。

注意:我写这些例子很匆忙,所以他们可能会有其他错误。抱歉,如果他们这样做

if(isset($_SESSION['user']) { 
if($_SESSION['user'] == "username") { 
    echo "Welcome, " . $_SESSION['user']; 
} 
else { 
$directory = "admin/"; 
$redirect[] = array(); 
$redirect[] = "page1.php"; 
$redirect[] = "page2.php"; 
if (in_array(($_SERVER["SCRIPT_FILENAME"], $redirect)) { 
    header("Location: index.php"); 
} 
} 
} 

如何将目录添加到代码?

回答

2

如果我正确理解您的问题,您希望没有$_SESSION['user']的人访问/admin/目录中的文件进行重定向?

if (!isset($_SESSION['user']) && stristr($_SERVER['SCRIPT_FILENAME'],'admin'){ 
    header('Location: http://www.goodbye.com'); 
} 

注意完整的URL,包括标头中的http。一个HTTP标头必须有一个完整的绝对URL才能正常工作。

+0

但是,是不是在寻找名为admin的脚本,如admin.php? –

+0

iirc,它应该包含从根开始的路径,您可以通过回显它的值来尝试此操作。或者做一个'print_r($ _ SERVER);' – Garytje

+0

好了,现在我已经读过了,我想我对此有所了解。我试图继续使用一个数组,因为我可能在将来有一个或两个文件在'admin'目录中,可以被公众访问,所以我不想重定向每一个文件。 –

相关问题