2012-08-05 67 views
2

拒绝访问子目录考虑在网站根目录这些文件结构:使用htaccess的

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> 

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

+0

Web根中的'1','2','3'和'4'目录? – 2012-08-05 06:04:49

+0

它们是位于Web根目录内的文件目录内的目录。 – 2012-08-05 06:07:04

+1

如果您阅读Apache文档,则将正则表达式与“_basename(文件名的最后一个组件)_”匹配,因此,如果在模式中包含路径信息,它将不会匹配。 – TerryE 2012-08-05 12:22:07

回答

1

如果您的htaccess文件位于您的web根目录中,并且files目录也位于Web根目录中,那么您将无法与其他(子)目录中的文件进行匹配。你可以尝试把<FilesMatch>在htaccess文件在files目录,或者您可以在网站根在htaccess文件使用mod_rewrite:

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

我猜这个问题是另一回事,因为我把htaccess中的放在根目录下,它可以工作,也许FilesMatch不检查目录,只对文件有效。 – 2012-08-05 06:19:08

+1

+1为重写方法,但我也建议在打开引擎后添加一个'RewriteBase /'。正如我上面所解释的那样,'Files'和'FilesNatch'指令只对文件名的basename元素进行操作。 – TerryE 2012-08-05 12:26:07

0

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

Order deny,allow 
Deny from all 
+1

安德烈亚斯,你使用“最佳”这个词是不正确的。 apache遍历请求路径并尝试打开存在的任何'.htaccess'。每个存在的都会生成一个额外的打开/ mmap/close。在共享主机上,DOCROOT层级结构通常是NAS服务器,所以如果这是第一个req过去'acregmin',这将产生一个VFAT缓存未命中和网络I/O。 DOCROOT .htaccess中的RewriteRule方法增加了10μSec的处理时间,但避免了这种额外的物理I/O。 – TerryE 2012-08-05 12:19:55

+0

我不想在每个目录中放置一个htaccess文件。我需要根目录中的整体htaccess。 – 2012-08-06 05:24:56