直接接近时PHP重定向?

时间:2011-03-01 09:56:38

标签: php

我正在处理这个包含header.php等不同页面的PHP页面。 我想要的是当你去header.php时,它会将你重定向到主页。我尝试使用标题但是当我包含它时,它会一直重定向我。 我认为使用$ _SERVER的if语句是可能的,但我不知道如何。

任何人都可以帮助我吗?提前谢谢!

3 个答案:

答案 0 :(得分:4)

if($_SERVER["PHP_SELF"] == "header.php") {
    header("Location: index.php");
}

虽然这不是最佳做法。您不应该允许用户首先访问PHP文件。禁止用户访问此类文件的最简单方法是将文件移到文档根目录上方,这意味着无法通过HTTP请求header.php文件。

答案 1 :(得分:4)

执行此操作的最佳方法是在主着陆页上创建常量,因此,假设index.php是您的主要着陆页之一。

您可以在其中创建一个常量,然后检查所有子模板,这些子模板应该只包含在主页面中。

示例:

<?php
define("IN_VIEW",true);

require_once "header.php";

然后在header.php中,您可以确保IN_VIEW已定义

<?php
if(!defined("IN_VIEW"))
{
     die("Direct Access Forbidden");
}

//Header Here

如果没有定义,那么显然页面已经直接加载而不是从index.php加载。

然后对于应该保护的每个其他“直接”页面,只需将三行放在文件的头部,并确保在主页面中定义了常量(indexloginlogout)等。

答案 2 :(得分:0)

另一个解决方案是简单地将所有内容重定向到index.php,以防止直接访问任何其他脚本。例如,在apache上,您可以使用.htaccess执行此操作,如下所示:

RewriteEngine On

# redirect everything to index.php except exceptions
RewriteCond %{REQUEST_URI} !/robots\.txt$
RewriteCond %{REQUEST_URI} !/favicon\.ico$
RewriteCond %{REQUEST_URI} !/static/
RewriteRule ^(.*)$ index.php [L]

您可以指定一些例外,例如robots.txt文件和图片目录。