【发布时间】:2014-01-21 22:10:06
【问题描述】:
我想根据用户的 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 中删除它)。
因此,如果有人能够提供帮助,我将非常感激。非常感谢!
编辑:我自己解决了这个问题。很简单:只需使用英文页面的根目录并将函数更改为“else {null;}” :-)
【问题讨论】:
-
你可以在 url 中添加一个 queryString,以便它们重定向到 "/?lang=en" 吗?然后,您可以在 JS 中嗅探 GET 并避免在设置时重定向。
-
我不确定为什么会发生这种情况,您可以做的一件事是将英语访问者发送到 mydomain.com/en/,然后从那里设置一个 301 到根域。如果您有兴趣,请在此处了解如何使用 301:css-tricks.com/snippets/htaccess/301-redirects
-
感谢您的建议,但我不想要这样一个“丑陋”的网址。 mydomain.com 应该是英文网站的标准 URL,但是当他们进入 mydomain.com 时,我需要将其他国家的用户重定向到给定的子文件夹。
-
谢谢,杰克!发生这种情况是因为在我重定向到 mydomain.com 后一次又一次地使用该脚本。重定向到 mydomain.com/en/ 确实有效,但我不希望 URL 中有那个子文件夹,并且通过 htaccess 重定向到 mydomain.com 会再次导致循环 - 我已经尝试过了。
-
我自己解决了这个问题(见有问题的编辑)。
标签: javascript redirect geoip