我一直在尝试使用 FilesMatch 指令。在第一次尝试时,我发现我的默认规则(规则集 1 和 2)不允许我访问www.test.com/
,但允许我访问www.test.com/index.php
我推测这是因为文件"/"
命中了规则集 1,但没有命中规则集 2,所以被阻止了。因此,我设置了规则集 3,现在一切似乎都正常了。我只是想问一下,是否有人对实施此指令有任何建议,以及我是否以正确的方式实施了此指令?
#Ruleset1
<FilesMatch "^.*$">
Order Deny,Allow
Deny from all
</FilesMatch>
#Ruleset2
<FilesMatch "^.*\.(css|html?|js|pdf|txt|xml|xsl|gif|ico|jpe?g|png|php?)$">
Order Deny,Allow
Allow from all
</FilesMatch>
#Ruleset3
<FilesMatch "">
Order Deny,Allow
Allow from all
</FilesMatch>
答案1
这很可能没有按照您预期的那样进行。
您的最后一场匹配有效地覆盖了其他规则并允许所有请求;""
将始终匹配所有内容(您的第一部分也将如此"^.*$"
)。
仅仅使用<FilesMatch>
似乎不适合你的方法,但你能否澄清你想要实现的目标?
编辑:
类似这样的事情应该对两种情况都起作用:
<Location />
Order deny,allow
Deny from all
</Location>
<LocationMatch "(/|\.css|\.html?|\.js|\.pdf|\.txt|\.xml|\.xsl|\.gif|\.ico|jpe?g|\.png|\.php)$">
Allow from all
</LocationMatch>