任何人都可以指导我如何限制可以从目录列表中的Apache下载的文件types?
我在httpd.conf中有一些目录定义,如下所示:
<Directory "/var/www/data01"> Options Indexes FollowSymLinks Require all granted AllowOverride none </Directory>
我想让用户做的是列出每个文件夹中的所有文件,但只下载具有特定扩展名的文件(例如* .txt)
我试过这个:
<Directory "/var/www/data01"> Options Indexes FollowSymLinks IndexOptions ShowForbidden Require all granted AllowOverride all order allow,deny <FilesMatch "\.txt$"> order deny,allow allow from all </FilesMatch> </Directory>
但是,当我浏览文件夹时,这给了我一个'您没有权限访问'的错误。
你可以使用mod_rewrite。 尝试以下操作:
<Directory "/var/www/data01"> Options Indexes FollowSymLinks IndexOptions ShowForbidden Require all granted AllowOverride all RewriteEngine On RewriteRule !(\.txt$|^$) - [NS,F] </Directory>
这可以防止访问(403 Forbidden),如果不请求.txt文件或裸目录(为了获得目录列表所需)。 NS ( nosubreq )标志是必需的,以跳过内部子请求。 在生成目录列表时,会为目录中的每个文件触发一个内部子请求。 所以,没有NS标志,目录列表最终被阻止。
Require all granted order allow,deny
你不应该混合Require (Apache 2.4+)和Order allow,deny (Apache 2.2)。 Apache 2.2指令只能用于向后兼容。 你应该在Apache 2.4+上使用Require 。 顺便说一句,这两个指令是相反的……第一个允许访问,第二个拒绝访问。 最终的结果是访问被拒绝(但这不是因为这些指令的顺序,而是因为“拒绝”访问获胜)。
更新:为了得到这个在子目录上工作,然后改变RewriteRule指令为:
RewriteCond %{REQUEST_FILENAME} -f RewriteRule !\.txt$ - [NS,F]
RewriteCond (condition)指令确保以下指令仅适用于实际文件(忽略目录)。 这使我们可以简化RewriteRule模式,因为我们不需要明确检查基本目录。