在我的.htaccess中,我有以下内容:
<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
<Files .htaccess>
order allow,deny
deny from all
</Files>
现在,我只是愚蠢还是错了?我在线查看并在Apache文档中查看并且不理解limit get post put delete
等,但我认为无论它在做什么都说允许它再允许它再次拒绝?它对我来说没有意义,我不确定是否应该从.htaccess中删除它,或者如果错误则更正它?我想第三个意味着拒绝访问.htaccess文件,但是这个顺序允许然后deny似乎首先允许然后立即拒绝。
答案 0 :(得分:30)
这是使用Apache配置指令的一种非常令人困惑的方式。
从技术上讲,第一位相当于
Allow From All
这是因为Order Deny,Allow
在允许指令之前评估了Deny指令。
在这种情况下,拒绝和允许相互冲突,但允许,作为最后一次评估将匹配任何用户,并且将授予访问权。
现在,只是为了清楚地说明,这种配置很糟糕,应该不惜一切代价避免,因为它会接受未定义的行为。
限制部分定义哪些HTTP方法可以访问包含.htaccess文件的目录。
此处,允许访问GET和POST方法,并拒绝PUT和DELETE方法访问。这是一个解释各种HTTP方法的链接:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
但是,只要您没有自定义CGI脚本或直接处理非标准方法(PUT和DELETE)的Apache模块,使用这些限制通常是无用的,因为默认情况下,Apache无法处理他们都是。
还必须注意的是,还存在一些其他方法也可以通过限制来处理,即CONNECT,OPTIONS,PATCH,PROPFIND,PROPPATCH,MKCOL,COPY,MOVE,LOCK和UNLOCK。
最后一点也绝对无用,因为任何正确配置的Apache安装都包含以下配置(对于Apache 2.2及更早版本):
#
# The following lines prevent .htaccess and .htpasswd files from being
# viewed by Web clients.
#
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>
禁止访问以“.ht”开头的任何文件。
等效的Apache 2.4配置应如下所示:
<Files ~ "^\.ht">
Require all denied
</Files>