PHP header(location:) 重定向到根目录

6

有没有一种方法可以创建一个以根目录开头的 header('Location:'); 路径。

例如:

formaction="/cert/forms/sessions/session-inc-info.php" 

或者

include($_SERVER['DOCUMENT_ROOT'].'/cert/forms/sessions/session-inc-info.php');  

cert是我的根目录文件夹。

我一直在尝试类似以下的代码:

header('Location:'.$_SERVER['DOCUMENT_ROOT'].'/cert/forms/sessions/session-inc-info.php);

并且

header('Location:/cert/forms/sessions/session-inc-info.php');

对我有效的唯一方法是使用../

header('Location:../../../session-inc-info.php');

但是对我来说很困难,因为我有很多文件夹和子文件夹。我有很多脚本必须进行重定向。

谢谢。

这是样本文件夹结构:

enter image description here

所以content.php将有一个按钮,重定向到session.php,我已经完成了这个步骤,现在当session.php脚本有一个header('Location:');必须重定向到dashboard.php。现在这是我的问题。我不知道如何创建路径,例如:

cert---->dashboard----->dashboard.php


从根目录显示文件夹结构。@Vincent - PassionInfinite
@PassionInfinite 好的...我会创建一个样本文件夹结构。 - Vincent Dapiton
主文件的名称是什么 - 应用程序的入口点?类似于 index.php 或类似的东西。它在哪里?假设它位于 CERT 内,使用相对路径从该位置重定向到 dashboard.php,您可以执行以下操作:header("Location: ./dashboard/dashboard.php") 对于 session.phpcontent.php 也是如此。但是这些文件不应该是助手文件而不是公开显示的文件,对吗? - Poiz
你的项目中也有.htaccess文件吗? - Poiz
我不想使用 ./,因为当我有许多子文件夹时很难跟踪。 - Vincent Dapiton
2个回答

13
header("Location: http://".$_SERVER['HTTP_HOST'].$formaction;

地址应该包含URL而不是服务器文件路径。


1
谢谢,它对我有效。header("Location: http://".$_SERVER['HTTP_HOST'].'/cert/forms/sessions/session-inc-info.php?id-inc='.$id); - Vincent Dapiton

1
您可以在应用程序的根目录下创建一个PHP文件,并将其命名为任何您喜欢的名称,比如说redirect.php。然后,在redirect.php文件中,您可以放置一些代码,看起来可能像这样:
<?php
    // CREATE AN ARRAY THAT WITH NUMERIC KEY
    // THAT WILL CORRESPOND TO THE FILE YOU WISH TO REDIRECT TO (ACTUALLY LOAD)
    // SINCE THIS IS A PSEUDO REDIRECT:
    $fileMap            = array(
        0   => "./file-1.php",
        1   => "./file-2.php",
        2   => "./file-3.php",
        3   => "./file-4.php",
        4   => "./file-5.php",
        5   => "./file-6.php",
        6   => "/cert/forms/sessions/session-inc-info.php",
        7   => "./../../session-inc-info.php",  //<== YOU MAY KEEP ADDING TO LIST
    );

    // CHECK THAT THERE IS A GET PARAM WITH NAME: to
    if(isset($_GET['to'])){
        $fileKey        = $_GET['to'];          //<== GET THE `to` PARAM FROM $_GET
        $loadableFile   = $fileMap[$fileKey];   //<== TRANSLATE `to` KEY TO A LOADABLE FILE

        // IF THE FILE [$loadableFile] EXISTS, LOAD IT
        // OTHERWISE REDIRECT TO MAIN-APPLICATION PAGE (HOMEPAGE)
        if(file_exists($loadableFile)){
            require_once $loadableFile;
        }else{
            header("location: index.php");      //<== ASSUMES index.php IS THE MAIN FILE.
            exit;
        }
    }

    // IF ALL FAILS, STILL REDIRECT TO THE MAIN-APPLICATION PAGE
    header("location: index.php");              //<== ASSUMES index.php IS THE MAIN FILE.

在您希望执行重定向的每个页面上,您可以简单地进行以下操作:

<?php
    // ASSUMING YOU WANT TO RE-DIRECT TO: `./../../session-inc-info.php`
    // AS YOU CAN SEE FROM THE `$fileMap` ARRAY, `./../../session-inc-info.php`
    // HAS THE KEY OF "7"
    // NOW ALL YOU CAN DO IS SIMPY APPEND "?to=7" TO `redirect.php` 
    // IN THE `header()` METHOD LIKE THIS:
    header("location: redirect.php?to=7"); 
    exit;
    /*EXPECTED TO LOAD THE FILE: `./../../session-inc-info.php`

注意:
这实际上不是一个重定向(因为它基本上只是从给定的位置/路径加载文件),但由于似乎您正在尝试加载某个文件,如:/cert/forms/sessions/session-inc-info.php,因此可以假设这可能是一种选择。要进行真正的重定向:只需直接使用header()函数,将确切的URL位置传递给它以进行重定向。 祝好运...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接