.htaccess白名单文件扩展名 - 子文件夹被阻止

时间:2017-02-07 10:35:35

标签: regex .htaccess

出于安全考虑,我想阻止除某些扩展名之外的所有文件。 我正在使用.htaccess中的以下条目执行此操作。

<FilesMatch "\.(html|js|css|ico|php|jpg|jpeg|gif|png|xls|xlsx|pdf|doc|docx|ppt|pptx)$">
    Order Deny,Allow
    Allow from all
</FilesMatch>

我的问题是,现在也会阻止对http://mydomain/subfolder/等子文件夹的常规请求。这是可以理解的,因为上述请求没有扩展名。

这些是我的尝试:

^.*(\.html|\.js|\.css|\.ico|\.php|\.jpg|\.jpeg|\.gif|\.png|\.xls|\.xlsx|\.pdf|\.doc|\.docx|\.ppt|\.pptx)$

...(仍然阻止子目录)

(\.(html|js|css|ico|php|jpg|jpeg|gif|png|xls|xlsx|pdf|doc|docx|ppt|pptx)?)$

......(不阻止任何事情)

1 个答案:

答案 0 :(得分:0)

我现在已经能够通过使用2个FilesMatch块来解决问题:

Order Allow,Deny 
Deny from all 
<FilesMatch "\.(html|js|css|ico|php|jpg|jpeg|gif|png|xls|xlsx|pdf|doc|docx|ppt|pptx)$">
    Order Deny,Allow
    Allow from all
</FilesMatch>
<FilesMatch "^(\/)?$">
    Order Deny,Allow
    Allow from all
</FilesMatch>

修改 遗憾的是,如果子文件夹没有尾部斜杠,则上述解决方案将失败。以下解决方案现在满足我的所有要求,并且更短:

### whitelist file extension which may be served
RewriteCond %{REQUEST_URI} !\.(html|js|css|ico|php|jpg|jpeg|gif|png|xls|xlsx|pdf|doc|docx|ppt|pptx)$ [nc]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [R=403,L]

&#34; -f&#34;表示条件仅适用于文件,而不适用于文件夹。