我們多年前就做過繁體網站,從訪問統計來看,基本上都是香港、台灣和海外華人,來自中國大陸的用戶很少。不過有些地方我們考慮得也不周全,例如一些在港台可以訪問的字典等内容,在内地成了敏感詞,容易給我們網站惹上麻煩。🙁
我們做網站無非是在為網民提供服務的同時獲得應得的一點廣告收入,不想卷入是非,最近準備把部分網站進行一些改造,除了删除一些内容以外(網上下載的敏感詞也不靠譜,還是需要人工甄别,真是個麻煩事情),幹脆隻對海外中文用戶提供服務,不讓中國用戶訪問。🚫
找到很久前寫的一篇《一個判斷訪問者是否來自中國大陸的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主要是避免一些麻煩,例如我們做的繁體網站上台灣同胞留言自稱中華民國,這個字眼出現在我們網站上就可能引起監管麻煩,還不如隻給台灣同胞看到