我想根据用户的IP地址将用户重定向到不同的语言/子文件夹。为此,我使用MaxMind的JavaScript GeoIP API。
问题:说英语的人应该留在mydomain.com而不是去mydomain.com/en/。但是,当我重定向到mydomain.com时,GeoIP脚本再次运行,从而产生无限循环。
这是我的代码(在mydomain.com的index.html中):
<script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script>
<script language="JavaScript">
var country = geoip_country_code();
if(country == "FR")
{
window.location = "http://mydomain.com/fr/"
}
else
{
window.location = "http://mydomain.com/";
}
</script>
在其他帖子中,我读到了关于设置cookie的内容,但我无法以解决问题的方式进行操作(当用户不接受cookie时,它仍会创建循环,例如,在移动设备上。)
另一个解决方案可能是重定向到mydomain.com/en/并通过htaccess删除URL中的/ en /文件夹,但我也无法完成此操作。
我希望它如何工作的一个例子是waze.com(看起来他们在/ en /文件夹中有英文版,但是从URL中删除它。)
所以,如果有人能够提供帮助,我将非常感激。非常感谢!
编辑:我自己解决了这个问题。它非常简单:只需使用英文页面的根目录并将功能更改为&#34;否则{null;}&#34; : - )
答案 0 :(得分:0)
您的问题不在于geoip,而在于您的代码。
试试这个:
var country = geoip_country_code();
var currentLocation = String(window.location);
//if geoip is equal FR and window.location is different "http://mydomain.com/fr/"
if(country === "FR" && currentLocation.indexOf("http://mydomain.com/fr/")!==0)
{
window.location = "http://mydomain.com/fr/"
}
//if geoip is different FR and window.location is equal "http://mydomain.com/fr/"
else if(currentLocation.indexOf("http://mydomain.com/fr/")===0)
{
window.location = "http://mydomain.com/";
}
要使用多种语言进行检测,只需编辑以下变量:
var defaultsLang
是主根支持的语言(site.com /)
var languages
种语言(site.com/fr/,site.com/es/等)
参见代码(未测试):
(function(){
var defaultsLang = ["en-us","en"];
var languages = {
"fr": true, //enable french pages
"pt": false, //tmp disable portuguese pages
"es": true //enable spanish pages
};
var country = geoip_country_code().toLowerCase(),
currentLocation = String(window.location),
detectCurrent = function(){
var a = currentLocation.replace(/^(http|https)[:]\/\//, "");
var b = a.split("\/");
b = b[1].toLowerCase();
a = null;
return b.length<5 && (/^[a-z\-]+$/).test(b) ? b : false;
};
var currentLang = detectCurrent();
defaultsLang = "|"+defaultsLang.join("|")+"|";
if(currentLang!==country && typeof languages[country] !=="undefined" && languages[country]!==false){
window.location = "http://mydomain.com/" + country + "/";
} else if(
defaultsLang.indexOf("|" + currentLang + "|")===-1 && //current page is not the same as default languague(s)
defaultsLang.indexOf("|" + country + "|")!==-1 && //geoip is in the list of default language(s)
currentLang!==false
){
window.location = "http://mydomain.com/";
}
})();