【问题标题】:Redirection from different path depths从不同路径深度重定向
【发布时间】:2017-03-04 20:28:10
【问题描述】:

在我的项目中,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我了解到无法获取“functions.php”的URI文件夹。

但是我能做些什么来解决这个问题呢?

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

【问题讨论】:

    标签: php redirect


    【解决方案1】:

    问题在于 $PROJECT_ROOT URL 不能通过 PHP 轻松引用。

    需要创建相对于 $_SERVER['DOCUMENT_ROOT'] 的项目 URL 抽象

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

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

    开头的 '//' 创建 http/https 协议抽象。

    上面的 URL 是由这些元素构成的:

    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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多