01/21
2015
现在有一个网站,想让北京地区的人打不开。思路是很明确的,通过IP屏蔽,只是怎么实现是个问题。我一开始因为不太了解,在网上查找北京地区的IP段,然后用.htaccess屏蔽。这个就太坑了,因为你不可能把北京地区的IP找全。后来经人指点,使用ip地址查询实现了这个功能。
15/11/10
今天学到了用搜狐ip数据库屏蔽地区的方法,感觉更方便一些。因为搜狐的这个是单纯的js,不涉及到php文件,可以直接加到首页文件里,不用对主页改名,也不用再创建php文件了。
<script type="text/javascript" src="http://pv.sohu.com/cityjson?ie=utf-8" ></script> <script>var sf=returnCitySN["cname"]; if(sf.indexOf("北京市")>=0){window.location.href="/404";}</script>
关于搜狐的这个api,可以参考此处。
另一个是新浪的工具:
<script src="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js" type="text/ecmascript"></script> <script type="text/javascript"> var city=remote_ip_info["city"]; if(city=="北京"){ //do someting } </script>
这个返回值里面还有country属性,可以判断国家或地区哦~
下面的方法是我以前用的,不建议使用。
这个是用查询纯真数据库的方法实现了这个功能。 查看参考网页
我修改后所用的方法是跳转,在主页index.html中没有实质内容,只是链接一个php。php会从数据库查询ip的地区,如果是北京地区的,就输出一个提示信息。如果ip不是北京地区的,则跳转到真正的主页index2.html。
主页中只加这一句代码:
<script type="text/javascript" src="http://www.example.com/example.php"></script>
php中的代码如下:
<?php header("Content-Type:text/html;charset=utf-8"); $cip = getenv('REMOTE_ADDR'); $cip1 = getenv('HTTP_CLIENT_IP'); $cip2 = getenv('HTTP_X_FORWARDED_FOR'); $cip1 ? $cip = $cip1 : null; $cip2 ? $cip = $cip2 : null; $city = file_get_contents('http://www.tnbrj.com/api/ip.php?ip='.$cip.''); if(substr_count($city,'北京')){ ?> var js = document.createElement("body"); js.innerHTML = "该页不存在!"; document.getElementsByTagName("html")[0].appendChild(js); <?php }else { ?> document.write('<script>location.href="http://www.example.com/index2.html";</script>'); <?php } ?>
其中的ip.php是其他网站的,我也没改,因为我自己找不到。我从网上下载的php版纯真ip库是2008年的,错误得没法用。人家这个我还抓不下来,只好先用着了。
我参考的代码里,并不是用的跳转,而是判断ip是北京之后就停止页面的加载。这要求这个代码在所有其他代码之前执行,我用着不生效,只好做成跳转了。