对于我正在进行的项目,我要求(“xxxx.php”);将我网站的某些部分包含在我的网站中。
例如,我有header.php,我的网站只使用一个简单的require(“header.php”)来向世界展示。
现在,我该怎么做才能使页面包含header.php的内容,但是要让用户无法通过
访问它答案 0 :(得分:4)
将文件放在Web服务器的DocumentRoot之外的某个位置。
答案 1 :(得分:3)
设置网络服务器,以便:
您有一个可访问文件所在的公共目录,例如静态媒体+ index.php等等
拥有一个资源目录,位于公共文件夹之外。
将网络服务器设置为从公共目录
包括这样的内容:
需要( “../私人/ header.php文件”);
答案 2 :(得分:3)
您可以在索引文件中定义一个常量,然后在header.php
中进行检查,以便检查此常量。
// check if the header.php file is accessed directly
if (!define('MY_SECRET_CONSTANT')) {
exit();
}
答案 3 :(得分:1)
从答案中可以看出:有很多方法可以做到这一点,这里有两个非常简单的方法,不需要你改变你的目录结构:
在index.php
和其他包含header.php
的文件中:
define('INCLUDED', true);
require 'header.php';
在header.php
:
if(!defined('INCLUDED')){
die('Forbidden'); // or you could redirect to home ... whatever you want :)
}
或者,您可以通过.htaccess
禁止访问。因此,您甚至不必触摸您的代码:
<Files header.php>
order allow,deny
deny from all
</Files>
如果您的包含在一个目录中,您只能拒绝访问该目录。
答案 4 :(得分:1)
您可以使用htaccess来确保不会查看特殊文件。通过虚拟主机条目可以实现相同的目的。
最好的做法是创建一个/ web文件夹,它是应用程序的“根”,并存储应该可访问的所有内容。其他文件夹转到其他任何位置,并包含在脚本中,这些脚本被设计为可供用户访问。
您的结构可能如下所示:
/var/www/mySite/inc/header.php
/var/www/mySite/web/index.php (including ../inc/header.php)
/var/www/mySite/web/css/style.css
您的apache虚拟主机看起来像这样:
<VirtualHost *:80>
ServerName www.mysite.com
# Basic stuff
DocumentRoot "/var/www/mySite/web"
DirectoryIndex index.php
<Directory "/var/www/mySite/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
现在无法通过您的域访问inc文件夹,因为您的网络文件夹是每个人从网址传入的根目录。另一方面,您的脚本当然可以导航到低于该值,并且包括来自任何地方的脚本。