【问题标题】:Deny access to subdirectories using htaccess使用 htaccess 拒绝访问子目录
【发布时间】:2012-08-02 14:25:16
【问题描述】:

考虑网络根目录上的这些文件结构:

files/1/1.jpg
files/1/2.jpg
files/2/1.jpg
files/2/3.jpg
files/3/6.jpg
files/3/8.jpg
files/4/1.jpg

我想拒绝使用 web 根目录中存在的 htaccess 文件访问文件夹 2 和 3 中的文件。我尝试但什么也没发生。这是我使用的代码:

<FilesMatch "(2|3)\/*$" >
   Order deny,allow
   Deny from all
</FilesMatch>

你会纠正我的错误吗? 谢谢。

【问题讨论】:

  • 1、2、3 和 4 目录是否位于 Web 根目录中?
  • 它们是位于 web 根目录中的 files 目录中的目录。
  • 如果您阅读 Apache 文档,正则表达式会与“basename(文件名的最后一个组成部分)”匹配,因此如果您在模式中包含路径信息。

标签: .htaccess apache2


【解决方案1】:

为了使用 htaccess 获得最佳性能,您应该在每个要保护的目录中创建一个 .htaccess 文件:

Order deny,allow
Deny from all

【讨论】:

  • Andreas,您对“最佳”一词的使用不正确。 apache 遍历请求路径并尝试打开任何存在的.htaccess。每个确实存在的都会生成一个额外的 open/mmap/close。在共享主机上,DOCROOT 层次结构通常由 NAS 提供服务,因此如果这是通过acregmin 的第一个请求,这将生成 VFAT 缓存未命中和网络 I/O。 DOCROOT .htaccess 中的 RewriteRule 方法增加了 10 微秒的处理时间,但避免了这种额外的物理 I/O。
  • 我不想在每个目录中都放一个 htaccess 文件。我需要根目录中的整体 htaccess。
【解决方案2】:

如果您的 htaccess 文件位于您的 Web 根目录中,并且 files 目录也在 Web 根目录中,您将无法匹配另一个(子)目录中的文件。您可以尝试将&lt;FilesMatch&gt; 放入files 目录中的htaccess 文件中,或者您可以在Web 根目录的htaccess 文件中使用mod_rewrite:

RewriteEngine On
RewriteRule ^files/(2|3)/ - [F,L]

【讨论】:

  • 我想问题是别的,因为我把 放在 htaccess 的根目录中并且它可以工作,也许 FilesMatch 没有检查目录,仅适用于文件。
  • +1 表示重写方法,但我也建议在打开引擎后添加RewriteBase /。正如我在上面解释的那样,Files 和 FilesNatch 指令仅对文件名的基本名称元素进行操作。
猜你喜欢
  • 1970-01-01
  • 2017-03-17
  • 2016-10-18
  • 2017-10-03
  • 1970-01-01
  • 2015-01-26
  • 2011-04-17
  • 1970-01-01
  • 2017-11-15
相关资源
最近更新 更多