.htaccess只允许某些IP范围的POST方法

时间:2012-03-26 20:20:43

标签: .htaccess

我想要一定范围的ips(Canada Country Block IPS)只能在我的登录页面(http://www.mysite.com/index.php?m=account_login)中使用POST方法注册页面 (http://www.mysite.com/index.php?m=account_register) 但是,我希望所有ips都可以访问我的主站点http://www.mysite.com/index.php并能够使用POST方法,例如我们的联系页面 (http://www.mysite.com/index.php?m=contactus)

谢谢。

<Limit GET POST>
order deny,allow
# Country: CANADA
# ISO Code: CA
# Total Networks: 6,365
# Total Subnets:  79,978,496
allow from 23.16.0.0/16
allow from 23.17.0.0/16
allow from 24.36.0.0/16
allow from 24.37.0.0/16
...
allow from 192.197.216.0/24
allow from 216.254.192.0/19
#
deny from all
</Limit>

1 个答案:

答案 0 :(得分:1)

没有直接的方法来实现这个,但我自己做了一个小技巧:-D Limit仅检查请求方法,因此无法检查文件或URL。解决方案是使用FilesMatch指令。但是在这里,我们有一个问题,就像我一样:QUERY STRING :-(。 这个解决方案是使用RewriteRule

RewriteRule login.html index.php?m = account_login [L,QSA] RewriteRule register.html index.php?m = account_register [L,QSA]

现在,我们拥有了我们想要的一切:

<FilesMatch "(login|register)\.html$"> 
     <Limit  GET POST>
        order deny,allow
        # Country: CANADA
        # ISO Code: CA
        # Total Networks: 6,365
        # Total Subnets:  79,978,496
          allow from 23.16.0.0/16
          allow from 23.17.0.0/16
          allow from 24.36.0.0/16
          allow from 24.37.0.0/16
          allow from 192.197.216.0/24
          allow from 216.254.192.0/19

          deny from all
     </Limit> 
</FilesMatch>

RewriteRule  (register|login)\.html     index.php?m=account_$1&allow=yes  [L,QSA]
RewriteCond %{QUERY_STRING}     m=account_(register|login)
RewriteCond %{QUERY_STRING}    !allow=yes
RewriteRule index\.php   - [F,L]

我更喜欢创建新文件以登录或注册以避免RewriteRule s。