PHP网站开发:如何禁止直接访问header.php与footer.php页面
这个场景太熟悉了,我当初搭PHP模板结构的时候也踩过这个坑,给你分享几个实用的解决办法,按需选就行:
方法一:定义常量验证(推荐,灵活可控)
在你的index.php最顶部先定义一个专属常量,比如:
<?php // index.php 开头 define('ALLOW_ACCESS', true); // 然后再引入头部底部 include("header.php"); // ... 中间内容 ... include("footer.php"); ?>
接着在header.php和footer.php的最顶部加上判断:
<?php // header.php/footer.php 开头 if (!defined('ALLOW_ACCESS')) { // 两种处理方式选一个: // 1. 直接拒绝访问,提示信息 die('抱歉,禁止直接访问此页面'); // 2. 重定向到主页(注意:这里要确保之前没有任何输出,否则header跳转失效) // header('Location: index.php'); // exit; } // 下面放原来的头部/底部内容 ?>
原理很简单:只有通过index.php引入时,这个常量才会被定义;直接访问header.php时,常量不存在,就会触发拦截。
方法二:通过文件路径判断(无需修改主文件)
如果不想改动index.php,可以在header.php和footer.php里直接判断当前是否是被直接访问:
<?php // header.php/footer.php 开头 if ($_SERVER['SCRIPT_FILENAME'] === __FILE__) { die('Direct access is not permitted'); } // 原有内容 ?>
$_SERVER['SCRIPT_FILENAME']是当前执行的脚本路径,__FILE__是当前文件的绝对路径。当直接访问文件时,两者完全相等;如果是被include引入的,SCRIPT_FILENAME会是主文件(比如index.php)的路径,和__FILE__不一样,就能区分开。
方法三:用.htaccess拦截(Apache服务器适用)
如果你的服务器是Apache,还可以通过配置.htaccess来彻底禁止直接访问这两个文件。在项目根目录创建/修改.htaccess文件,添加:
<FilesMatch "^(header|footer)\.php$"> Order Allow,Deny Deny from all </FilesMatch>
这样用户直接访问这两个文件时,服务器会返回403禁止访问的页面,更彻底,而且不需要修改PHP代码。
小提醒
如果选择用header('Location: ...')跳转,一定要确保在调用header()之前没有任何输出(包括空格、HTML标签),否则会报错。如果不确定,可以在文件开头加上ob_start();开启输出缓冲。
内容的提问来源于stack exchange,提问作者user9778900
相关产品推荐
相关产品推荐

