我有一些公用文件夹中的私人文件,我想阻止他们的访问。 例如让我说我有以下文件树:
我想阻止对当前目录中的FileB和FileA的访问,并允许访问DictA目录中的FileA。 首先想到的是使用FilesMatch指令,如下所示:
<FilesMatch "^(?:FileA)|(?:FileB)$"> Deny from all </FilesMatch>
这里的问题是在DictA里面的FileA也会被阻塞,这不是我想要的。 我可以通过添加另一个.htaccess文件到DictA,但我想知道是否有一个解决scheme,不会涉及到这一点。
PS:我不能将私人文件移动到一个单独的文件夹。
mod_rewrite可以做到这一点。
RewriteRule ^File[AB]$ - [R=404]
你有几种方法:
一个是写一个包含/
作为停止字符的正则expression式。
另外一个,允许使用Apache的任何选项:为当前目录定义所需的选项,然后为子目录定义相反的选项。
<Directory /var/www/mydir/> Options -Indexes </Directory> <Directory /var/www/mydir/*> Options +Indexes </Directory>
所以对于你的例子,只需在当前目录中使用deny
,并allow
子目录:
<Directory /var/www/mydir/> <FilesMatch "^(?:FileA)|(?:FileB)$"> Deny from all </FilesMatch> </Directory> <Directory /var/www/mydir/*> <FilesMatch "^(?:FileA)|(?:FileB)$"> Allow from all </FilesMatch> </Directory>