2011-03-01 63 views
2

我工作的这个PHP页面至极包括像header.php中不同的页面。 我想要的是当你到header.php时,它会将你重定向到主页。我尝试使用标题,但是当我包含它时,它不断重定向我。 我认为这可能与$ _SERVER if语句,但我不知道如何。PHP直接接近时重定向?

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

+1

通过您的应用程序体系结构是坏的方式 – 2011-03-01 09:59:06

+0

我们都开始某处@Shakti;) – RobertPitt 2011-03-01 10:04:58

+0

@Shakti为什么,你是什么意思? – 2011-03-01 10:11:21

回答

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。

,然后为应确保您只需将三条线在文件的头部,并确保了常量,在您的主网页(indexlogin定义所有其他“中直接”页面,logout )等

+0

很好解释。 – 2011-03-01 10:08:17

+0

谢谢,作品像魅力! – 2011-03-01 10:15:50

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

虽然这不是最佳实践。你不应该让用户首先能够访问PHP文件。禁止用户访问此类文件的最简单方法是将文件移动到文档根目录上,这意味着不可能通过HTTP请求header.php文件。

+1

像Greg说的那样,将它移动或放入一个带有.htaccess的文件夹中,以禁止访问。 – Treffynnon 2011-03-01 10:04:42

+0

它没有工作,它使用PHP_SELF时读取整个路径,但是您给了我一个很棒的提示,谢谢! (之所以说它读取整个路径是因为我本地主机服务器..由于上工作!) – 2011-03-01 10:13:23

+0

@Jay威特:好吧,如果'($ _ SERVER [ “PHP_SELF”] ==“HTTP://本地主机/头。 php“){...} – Greg 2011-03-05 18:32:14

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文件和图像目录。