PHP开发

Apache的order deny/allow命令的含义

Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权。order,顾名思义是顺序的意思,所以order命令可以决定deny和allow起作用的顺序,通俗的说就是谁排在最后那么谁就有最终的决定权。

order deny,allow和order allow,deny的区别也就显而易见了,前者的意思是先检查是否有deny命令,不论有没有都会再继续检查是否有allow规则,如果有,allow规则的内容可以覆盖掉deny规则。例如,

Order Allow,Deny
Allow from ip1
Deny from all

本意是想禁止ip1的访问,而允许其他所有ip访问,但显然用反了顺序,按照谁在后谁最大的原则,deny是掌握大权的人,所以deny from all就将allow的命令否决了。正确的写法应该是:

Order Deny,Allow //先检查Deny,并由Allow拍板
Deny from all       //Deny命令要求禁止所有ip的访问
Allow from ip1     //Allow说只允许ip1访问

结果:只允许ip1访问网站,禁止其他所有ip的访问。

按照这个原则,还有如下应用。

禁止特定ip的访问

<Files 403.shtml>
order allow,deny
allow from all
</Files>
deny from 1.1.1.1 ;写要封的IP

禁止部分ip,其他的全部开放的两种写法

Order Deny,Allow
Deny from ip1 ip2

或者

Order Allow,Deny
Allow from all
Deny from ip1 ip2

参考文章:Apache的Order Allow,Deny 详解