出于安全考虑,我想阻止除某些扩展名之外的所有文件。 我正在使用.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)?)$
......(不阻止任何事情)
答案 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;表示条件仅适用于文件,而不适用于文件夹。