我正在处理这个包含header.php等不同页面的PHP页面。 我想要的是当你去header.php时,它会将你重定向到主页。我尝试使用标题但是当我包含它时,它会一直重定向我。 我认为使用$ _SERVER的if语句是可能的,但我不知道如何。
任何人都可以帮助我吗?提前谢谢!
答案 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加载。
然后对于应该保护的每个其他“直接”页面,只需将三行放在文件的头部,并确保在主页面中定义了常量(index
, login
,logout
)等。
答案 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文件和图片目录。