【问题标题】:Deny access to some subdirectories via .htaccess拒绝通过 .htaccess 访问某些子目录
【发布时间】:2017-10-03 15:54:56
【问题描述】:

这是一个常见的问题,但我有点愚蠢,所以其他方法对我不起作用。我想拒绝访问以下子目录(注意:主站点位于这样的http://localhost/en/ 并且每个子目录都以/en/ 盯着.htaccess 文件所在的位置):reg_auth_rec_del/ajax/(及其所有文件),@987654326 @、media/scripts/media/translations/。但问题是所有这些文件都用于所有页面(例如media/parts/footer.php 用于所有页面,并且可以在index.php 等页面上查看。所以我想阻止用户直接查看所有这些文件。

我的意思是,我不希望它们直接可见。

现在,我只是用这种方式,但我认为这不是处理事情的好方法:

$admins = array("192.168.0.100", "192.168.0.101", "192.168.0.102");
$ip = $_SERVER['REMOTE_ADDR'];

if(in_array($ip ,$admins, true)){
    $_SESSION['PERMISSIONS'] = "ADMIN";
} else {
    $_SESSION['PERMISSIONS'] = "USER";
}

//So if $_SESSION['PERMISSIONS'] == "USER", I can decide if I'd ike to open access to some files, and
//if the file can be viewable by user

【问题讨论】:

  • 我不知道if(defined...) 的把戏。
  • 我认为其他帖子可以帮助stackoverflow.com/a/11729748/6208463
  • 如何在页面上使用它们?如果像 media/translations/en-US.php 这样的文件只是包含在 PHP 头文件中,您可以拒绝访问(Apache 2.2 中的 Deny from all,2.4 中的 Require all denied)但如果 media/scripts 包含在前端使用的 JavaScript 文件,您必须允许访问,否则它们将无法在客户端运行;最好的办法是禁用目录索引。
  • @CD001 是的,脚本连接到像 <script src="media/scripts/jquery.js"></script> 这样的文件,并且部分包含在我的其他页面中。我想拒绝访问ajax 文件夹(除了helper.php),以防万一服务器崩溃以防止用户查看所有会话数据
  • 如果您将这些其他文件放在 webroot 之外的文件夹中,则它们无法在浏览器中访问它们。例如,点 apache 将其设置为 webroot /mysite/public,然后将/mysite/templates/中的部分模板

标签: php apache .htaccess


【解决方案1】:

最好的方法是按照 cmets 中的 @JasonJoslin 建议,将 PHP 文件移到文档根目录之外。您仍然可以将它们包含在其他 PHP 文件中。

对于 Javascript 文件、样式表和图像,无法拒绝访问,因为这些文件包含在 HTML 响应中,客户端必须能够以某种方式加载它们。


如果您想将文件保留在文档根目录中并禁止访问,您可以使用旧样式OrderAllow/Deny,或应用Access control 中描述的新指令。在子目录reg_auth_rec_del/ajax等下放一个.htaccess文件

Require all denied

这也应该拒绝访问目录及其所有子目录。

【讨论】:

  • RedirectMatch 怎么样?有没有使用它的解决方案?
  • RedirectMatch 仅在您想发送另一个资源时才有用。
猜你喜欢
  • 2017-03-17
  • 2012-08-02
  • 1970-01-01
  • 2012-01-12
  • 2016-10-18
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多