【问题标题】:PHP redirect when directly approaching?直接接近时PHP重定向?
【发布时间】:2011-03-01 09:56:38
【问题描述】:

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

谁能帮帮我?提前致谢!

【问题讨论】:

  • 顺便说一下你的应用架构不好
  • 我们都从某个地方开始@Shakti ;)
  • @Shakti 为什么,你是什么意思?

标签: php


【解决方案1】:

最好的方法是在您的主要目标网页上创建一个常量,因此假设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,@987654327 @,logout) 等

【讨论】:

【解决方案2】:
if($_SERVER["PHP_SELF"] == "header.php") {
    header("Location: index.php");
}

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

【讨论】:

  • 就像 Greg 说的那样移动它或将它放在一个文件夹中,其中包含 .htaccess 以禁止访问。
  • 它不起作用,当我使用 PHP_SELF 时它会读取整个路径,但是您给了我一个很好的提示,谢谢! (它读取整个路径的原因是因为我在 localhost-server 上工作。谢谢!)
【解决方案3】:

另一种解决方案是简单地将所有内容重定向到 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 文件和图像目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2013-11-02
    相关资源
    最近更新 更多