我的MVC目录结构中有一个私人文件夹,我想拒绝对其的所有访问。访问此文件夹(和包含文件)的唯一方法是仅通过includes。
对于公用文件夹,任何人都应该能够访问它,因为这是我的视图。
根index.php是我的入口文件,它应该能够包含并执行私有的index.php脚本。
有谁能帮助我或为我指明实现这一目标的正确方向吗?
private
model
controller
core
config.ini.php
index.php
...
public
stylesheets
signup.php
login.php
index.php
...
index.php
有两种方法:
1:正确的方式
/homedir/-您的网站所在的位置
/homedir/private/您的私人文件所在的位置
/homedir/httpdocs/-网站的公共部分
2:另一种方式
/httpdocs/private/-private文件
/httpdocs/private/.htaccess-从所有订购允许、拒绝和拒绝
/httpdocs/-的其余文件
但是,您应该知道,如果您的Web服务器挂断,或者更改某些特定设置,您的.htaccess文件可能会变为非活动文件。
这意味着你的所有私人文件都可以通过浏览器访问。
这就是为什么第一种方式比.hta访问限制更受欢迎的原因。
还有什么可能?代码级别限制:
-
在每个公共php脚本中定义一个常量:
define("MY_SECRET_CONSTANT",1);
-
在每个私有php脚本中,检查是否在代码的第一行定义了常量:
if(!defined("MY_SECRET_CONSTANT")){die("无法直接打开文件")}
为您不想直接访问的所有文件夹添加this.htaccess。
<Files *.php>
Order Deny,Allow
Deny from all
</Files>
如果您使用Apache,典型的解决方案是放入.htaccess文件/私有包含:
Deny from all
我也同意hakre的观点,即它对您的webroot公共目录更有意义。
另一种解决方案是将webroot设为公共,然后将private移到webroot目录的外部。
即。
site/private/...etc...
site/www/index.php
site/www/stylesheets/...etc...
www是你的webroot。