从不同路径深度重定向

时间:2016-10-22 17:34:39

标签: php redirect

在我的项目中,PHP中的文件检查身份验证。

$ PROJECT_ROOT / lib / functions.php:

<?php
check_authentication();

function check_authentication(){
        if (session_status() == PHP_SESSION_NONE) {
            session_start();
        }

        if(defined('authorized') && authorized){
                if(!(isset($_SESSION['admin'] && $_SESSION['admin']))){
                    header('Location: login.php');
                    exit(0);
                }
        }
}

check_authentication函数检查用户是否已经过身份验证,如果没有,则会重定向到$ PROJECT_ROOT / login.php页面。

在文件$ PROJECT_ROOT / reader.php中:

<?php
define('authorized',TRUE);

require_once('lib/functions.php');

这很好用!

但是在文件$ PROJECT_ROOT / modules / text.php中:

<?php
define('authorized',TRUE);

require_once('../lib/functions.php');

这不能正确重定向,因为它在$ PROJECT_ROOT目录中找不到

this question我明白无法获取&#34; functions.php&#34;的URI文件夹。

但是我该怎么做才能解决这个问题呢?

显然我可以尝试使用绝对路径重定向,但这会损害我项目的可移植性。

1 个答案:

答案 0 :(得分:0)

问题是无法通过PHP轻松引用$ PROJECT_ROOT URL。

所需要的是创建相对于$ _SERVER的项目URL抽象[&#39; DOCUMENT_ROOT&#39;]

这可以在$ PROJECT_ROOT / lib / functions.php中实现:

define(PROJECT_URL,
       '//'.$_SERVER['HTTP_HOST'].
       substr(dirname(__DIR__), strlen($_SERVER['DOCUMENT_ROOT']))
);

首发&#39; //&#39;创建http / https协议抽象。

以上网址由以下元素构成:

echo __DIR__;  // /var/www/html/project_x/service/lib (current script directory) 
echo '<br>';
echo dirname(__DIR__); // /var/www/html/project_x/service (the data model root directory in this case)
echo '<br>';
echo $_SERVER['DOCUMENT_ROOT']; // /var/www/html (prefix that need to be removed)
echo '<br>';
echo PROJECT_URL; // //localhost/project_x/service

现在将使用绝对URL

进行重定向
header('Location: '.PROJECT_URL.'/login.php');