我们多年前就做过繁体网站,从访问统计来看,基本上都是香港、台湾和海外华人,来自中国大陆的用户很少。不过有些地方我们考虑得也不周全,例如一些在港台可以访问的字典等内容,在内地成了敏感词,容易给我们网站惹上麻烦。🙁
我们做网站无非是在为网民提供服务的同时获得应得的一点广告收入,不想卷入是非,最近准备把部分网站进行一些改造,除了删除一些内容以外(网上下载的敏感词也不靠谱,还是需要人工甄别,真是个麻烦事情),干脆只对海外中文用户提供服务,不让中国用户访问。🚫
找到很久前写的一篇《一个判断访问者是否来自中国大陆的Drupal模块及PHP函数》,这篇文章的附件中有可以下载的模块文件,在需要的Drupal网站上安装,然后在html.tpl.php显示模板中调用,只要是来自中国的IP地址就用403拒绝,其它国家和地区的IP就放行,示范的PHP代码片段:
if (in_china()) { header('HTTP/1.1 403 Forbidden'); print '403 Forbidden'; exit; }
实测是可以正常运作的,后来又想在MediaWiki网站中调用,就把上面模块中的两个文件in_china_IP2Location.php、in_china_IP-COUNTRY.BIN下载放置在MediaWiki网站目录中,试了LocalSetting.php、index.php中调用都不对,修改skins/Vector/VectorTemplate.php可以对登录用户有效,但对匿名用户无效,因为匿名用户访问的是文件缓存,于是尝试修改includes/cache/HTMLFileCache.php,加入以下内容:
require_once dirname(__FILE__).'/in_china_IP2Location.php'; $ip = $_SERVER['REMOTE_ADDR']; //print "ip=$ip"; $db = new \IP2Location1\Database1(dirname(__FILE__)).'/in_china_IP-COUNTRY.BIN', \IP2Location1\Database1::FILE_IO); $records = $db->lookup($ip, \IP2Location1\Database1::ALL); $countryCode = $records['countryCode']; //print "countryCode=$countryCode"; //$countryCode = 'CN'; if ($countryCode == 'CN') { $server_name = $_SERVER['SERVER_NAME']; //print "in china true"; header('HTTP/1.1 403 Forbidden'); print '403 Forbidden'; exit; }
实测是没有问题的,那个BIN文件以后可能会过时,到时候需要进行更新。
另外需要说明的是,上面这样做纯粹是为了避免无谓的麻烦,不是故意用于黄赌毒(此处省去1万敏感词)等违法内容。⚠
上个月去北京遇到的AdSense发布商朋友也有主做海外用户而屏蔽国内IP的,他们做的内容也是英文等多语言内容,放弃国内中文用户对他们来说没有特别影响,还省得各种麻烦,包括老是被采集、抄袭。😤
更新:后来采用了Cloudflare,就可以使用其中带有的Web Appliacation Firewall(Web应用防火墙WAF)来设置禁止来自中国大陆的IP地址访问,这样就更简单了。
评论2
为什么要屏蔽中国的IP
为什么要屏蔽中国的IP屏蔽国内IP主要是避免一些麻烦
屏蔽国内IP主要是避免一些麻烦,例如我们做的繁体网站上台湾同胞留言自称中华民国,这个字眼出现在我们网站上就可能引起监管麻烦,还不如只给台湾同胞看到