昨天有一个客户的需求,就是中文浏览器跳转另一个域名,他说自己的opencart买了个插件,插件会根据不同语言跳转不同的二级域名且显示中文,然后要求我帮忙改规则文件让中文的跳转另一个主域名,一开始我没多想,就根据他思路去改规则文件[当时脑袋短路吧],由于那个插件工作原理我不知道,因为我手上没有,又是付费的,所以我只能通过普通的规则文件写法写了重定向定义,可是那样不行,改来改去还是不行,后来我用了下下策,建立个cn子目录来实现,可还是有BUG,默认加载是不存在cn这个二级目录域名的,也就是就算我规则文件改了生效了,也需要点击那个中文的才会进入cn的二级目录[废话好多,进入正题]
于是我查了资料,写了下面的判断语句,自己本地用个php做测试
<?php $language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,5); if($language == "zh-cn") header("Location: http://cn.abc.com"); else header("Location: http://abc.com"); ?>
可问题来了,在谷歌下不能判断,即使我改为zh也不行,我在火狐下倒是可以的,经过调整测试,和网上的资料,把第一行后面的5改为4,还是不行,不过后来还是搞定了,用下面这样的代码:
<?php $language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4); if(preg_match("/zh-c/i", $language)){ header("Location: http://cn.abc.com"); }elseif(preg_match("/zh/i", $language)){ header("Location: http://cn.abc.com"); }else{ header("Location: http://abc.com"); } ?>
但是,我用火狐的时候,出现一个浏览器提示,说有一个不正确的重定向,嗯,于是我去掉了最后一句的else那一句,也就是直接判断,处理,默认情况不处理,当然了,看具体你的需求了,没有的情况不处理,则去掉第七八行,下面是几个语言的示例:
"/en/i" 英语
"/fr/i" 法语
"/de/i" 德语
"/jp/i" 日语
"/ko/i" 朝鲜
"/es/i" 西班牙语
"/sv/i" 瑞典
其他语言可以自己在网上搜索资料替换即可!
上面代码加在index.php 的最前面即可!