首先,我是 Apache .htaccess 的新手。我有一台服务器,它必须允许用户只浏览 mp4 和 png 文件。因此,我一直在阅读 Apache HTTP Server 文档,并根据其中的内容,我将以下内容添加到我的 .htaccess 中:
<filesMatch "\.(png|mp4)$">
Order Allow,Deny
Allow from all
</filesMatch>
因为据我所知,这意味着“对于每个文件,如果其扩展名为 png 或 mp4,则允许所有人获取它。否则拒绝访问”。显然,我错了,因为这个禁止我访问任何文件/文件夹允许我访问文件夹和 html 文件(当然还有 png 和 mp4 文件)。那么,如何才能只允许访问 png 和 mp4 文件呢?另外,我想知道如何让过滤器忽略大小写。
谢谢。
编辑:首先 - 忘了说我需要允许本地主机访问所有内容(即,拒绝必须仅针对非本地主机)。我真的不知道这是默认行为还是有必要以某种方式指示它。此外,我在进行测试时有一个损坏的文件,这就是为什么我总是得到“禁止访问”所有内容的原因。我已经更新了帖子。
答案1
尝试
Order Allow,Deny
<filesMatch "\.(?i:png|mp4)$">
Allow from all
</filesMatch>
该?i:
部分应该允许不区分大小写的匹配,并且将顺序放在 FilesMatch 之外使其拒绝所有未明确允许的内容。
答案2
终于找到解决办法了:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
<filesMatch "\.(?i:png|mp4)$">
Order Allow,Deny
Allow from all
</filesMatch>
通过这个,我告诉“默认情况下,禁止访问所有内容。然后,如果文件是 PNG 或 MP4 类型(是的,?i:有效地忽略大小写),则允许从任何地方访问它。
请注意,我必须将 httpd.conf 中的所有 AllowOverride None 条目覆盖为 AllowOverride All,以便 .htaccess 真正被考虑在内(之前它被忽略了)。