我正在构建一个 Web 应用程序,并且我使用大量包含文件来构建我的大部分页面。
例如:
profile.php 页面包括 about.php、timeline.php、photos.php
现在,如果用户尝试直接访问我的一个包含文件,我想将他们发送到我的 404 页面。我怎样才能做到这一点?
转到 localhost/timeline.php 应该将用户重定向到 404。
我的想法是在这些包含文件中编写一个 IF 语句,以检查文件是否被直接打开,这是否可能?
我正在构建一个 Web 应用程序,并且我使用大量包含文件来构建我的大部分页面。
例如:
profile.php 页面包括 about.php、timeline.php、photos.php
现在,如果用户尝试直接访问我的一个包含文件,我想将他们发送到我的 404 页面。我怎样才能做到这一点?
转到 localhost/timeline.php 应该将用户重定向到 404。
我的想法是在这些包含文件中编写一个 IF 语句,以检查文件是否被直接打开,这是否可能?
在 中定义一个常量profile.php
,并检查它是否存在于包含的文件中:
if (!defined("SOME_CONSTANT")) {
//Redirect or send a 404 header
}
www
从 Web 根目录(通常是一个或htdocs
文件夹)中获取在 Web 上下文中作为独立文件没有意义的文件。
您可以使用简单的 if 语句
if(!defined("SECURE")) {
header("HTTP/1.0 404 Not Found", true, 404);
include("404_Not_Found.html"); //include the 404 page
exit;
}
确保在包含的页面上定义安全常量。
在前端控制器中定义一个常量并检查它是否在其他文件中设置。
在顶部的前端控制器中:
define("IN_APP");
然后在您的其他页面进行任何处理之前:
if(defined("IN_APP")) { die(header('HTTP/1.0 404 Not Found', true, 404)); }
然而,更好的选择是将您的其他文件放在子目录中,并使用包含以下代码的 .htaccess 文件拒绝对其进行访问。
Order deny,allow
deny from all
这仍将允许 php 包含文件,但会阻止任何人从 Web 访问它们。