前阵子在做个项目时,因为网站是有两个版本,一个是英文,一个是中文,显然,英文主要做国外市场,中文做国内市场。现在要求是国内的用户访问就访问中文站,国外用户访问就访问英文站,而且英文站不想让国内人访问。
原先想起这问题,就想到用IP筛选,但一想那不是每个访问都是查一遍IP数据库。这个方法不太好。然后就想起了Google,每个区域的用户访问同一个页面时,显示不同的语言,而页面又是同一个。那很显然是用语言还判断的。这一想,这方法应该比较实际。虽然在中国地区不是全部都用中文系统,但这也筛选了90%以上了吧。也算是达到目的。
实现方法很方便,只面修改 httpd.conf 即可,增加代码如下:
LoadModule setenvif_module modules/mod_setenvif.so
# 需要检查一下,是否开启 setenvif_module 模块
SetEnvIf ACCEPT-LANGUAGE ^zh-cn let_me_in
# 判断为简体中文的条件,如想设是全部中文,可改为 ^zh
SetEnvIfNoCase Referer "^http://(.*).taobao.com/" local_ref=1
# 此条件是允许某站的外链,因为即是同产品,总有些图片想直接使用,以免也被拒绝
<Directory "C:/yourroot">
Order deny,allow
Deny from env=let_me_in
Allow from env=local_ref
# Allow from 202.103.156.156
# 此行意为让某IP的用户可以访问
</Directory>
如果没有修改httpd.conf的权限,或是一些其它控制,想在程序里实行,PHP代码如下:
$NOTCHINESE=FALSE;
if (substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2)!="zh") $NOTCHINESE=TRUE;
有了这行变量,下面的方法就看你自己想做什么都行了,可以让他转其它站,也可显示其它语言等。