我有某些文件,例如header.php
和footer.php
。我想禁止从浏览器地址栏直接请求这些文件。
如果我在代码中有include 'file.php'
,那么它应该包括在内,但是如果它是直接请求的,我不希望它被显示,因为它没有用处。可能吗?
提前致谢:)
答案 0 :(得分:9)
你可以按照可取的顺序(从“好”到“有点作品”)做任何这些事情:
/somepath/example.com/htdocs/
映射到http://example.com/
: /somepath/example.com/htdocs/index.php
/somepath/example.com/includes/header.php
/somepath/example.com/includes/footer.php
的index.php:
<?php require_once('../includes/header.php') ?>
<Files (header|footer).php>
Deny from all
</Files>
的index.php:
<?php define('INCLUDED_FROM_MAIN_FILE_EXAMPLE_COM',true) ?>
的header.php:
<?php if (!defined('INCLUDED_FROM_MAIN_FILE_EXAMPLE_COM')) { die(); }
答案 1 :(得分:2)
防止这种情况的一种常见方法是在index.php
(或任何你称之为)中创建一个定义并检查该定义。
这样你就可以在index.php
define('USING_INCLUDE', 1);
这在你的footer.php
:
if(!defined('USING_INCLUDE')){
header('HTTP/1.1 403 Forbidden');
die();
}
答案 2 :(得分:0)
为什么要将它们重命名为header.php.inc
?然后设置
<Files *.inc>
Order allow,deny
Deny from all
</Files *.inc>
我认为这很标准。