-1

我的 MVC 目录结构中有一个私有文件夹,我想拒绝所有访问。访问此文件夹(和包含文件)的唯一方法是仅通过包含。

对于公用文件夹,任何人都应该能够访问它,因为那是我的视图。

根 index.php 是我的入口文件,它应该能够包含和执行私有 index.php 脚本。

任何人都可以帮助我或指出我实现这一目标的正确方向吗?

private
    model
    controller
    core
    config.ini.php
    index.php
    ...
public
    stylesheets
    signup.php
    login.php
    index.php
    ...
index.php
4

3 回答 3

1

为您不想直接访问的所有文件夹添加此 .htaccess。

<Files *.php>
    Order Deny,Allow
    Deny from all
</Files>
于 2014-04-27T08:59:22.260 回答
1

如果您使用的是 Apache,典型的解决方案是将 .htaccess 文件放在 ./private 中,其中包含:

Deny from all 

我也同意 hakre 的观点,即公共目录对您的 webroot 更有意义。

另一种解决方案是使 webroot 公开,然后将私有移动到 webroot 目录之外

IE。

site/private/...etc...
site/www/index.php
site/www/stylesheets/...etc...

www 是您的网络根目录。

于 2014-04-27T08:59:34.190 回答
1

有两种方法:

1:正确的方式

/homedir/ - 你的网站在哪里

/homedir/private/ - 您的私人文件所在的位置

/homedir/httpdocs/ - 网站的公共部分

2:另一种方式

/httpdocs/private/ - 私有文件

/httpdocs/private/.htaccess - 命令允许,拒绝拒绝所有

/httpdocs/ - 其余文件

但是,您应该知道,如果您的网络服务器挂起,或更改某些特定设置 - 您的 .htaccess 文件可能会变为非活动状态。

这意味着您的所有私人文件都将通过浏览器变得可用。

这就是为什么第一种方式优于 .htaccess 限制的原因。

还有什么可能?代码级别限制:

  1. 在每个公共 php 脚本中定义一个常量:

    定义(“MY_SECRET_CONSTANT”,1);

  2. 在每个私有 php 脚本中,检查是否在代码的第一行定义了常量:

    if(!defined("MY_SECRET_CONSTANT")) { die("无法直接打开文件。"}

于 2014-04-27T09:04:20.370 回答