Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 识别用户的网站';s位置/IP&;基于此,_Javascript_Html_Web_Geolocation - Fatal编程技术网

Javascript 识别用户的网站';s位置/IP&;基于此,

Javascript 识别用户的网站';s位置/IP&;基于此,,javascript,html,web,geolocation,Javascript,Html,Web,Geolocation,标题很清楚 我的网站由英文和西班牙文组成。 您可以通过单击转到主站点(西班牙语),然后转到翻译版本(英语),网址为。在每个页面的索引处都有一个链接(在底部),允许用户从一个站点传递到另一个站点 然而,我想知道,像谷歌、雅虎这样的大网站是怎么做的!,以及其他品牌的网站,以识别用户的地理位置/IP,从而根据这一点调整网站的语言(即,您来自中国,访问www.google.com,您将被重定向到www.google.cn) 我已在我网站的每一页上声明了以下语言: <meta http-equiv

标题很清楚

我的网站由英文和西班牙文组成。 您可以通过单击转到主站点(西班牙语),然后转到翻译版本(英语),网址为。在每个页面的索引处都有一个链接(在底部),允许用户从一个站点传递到另一个站点

然而,我想知道,像谷歌、雅虎这样的大网站是怎么做的!,以及其他品牌的网站,以识别用户的地理位置/IP,从而根据这一点调整网站的语言(即,您来自中国,访问www.google.com,您将被重定向到www.google.cn)


我已在我网站的每一页上声明了以下语言:

<meta http-equiv="content-language" content="en">

这个例子当然来自其中一个英文网站

我希望有人能帮我一把。
谢谢(如果我遗漏了什么,请告诉我)。

至于谷歌,您的位置是根据您的IP地址确定的。从美国境外向google.com发出的请求将返回一个HTTP/1.1 302 find,它会将您重定向到您所在国家的特定域

,这样做会使搜索引擎优化变得棘手和复杂。我建议读一读(谷歌软件工程师)关于谷歌如何处理302重定向的文章:

不同的搜索引擎以不同的方式处理302重定向。使用302重定向,您可能会面临被搜索引擎忽略原始域的风险


如果您想根据用户的IP地址确定用户的位置,有许多现成的服务,基本上将大多数IP范围映射到国家/地区。您可能需要检查:


另一种流行的技术是解析Accept Language HTTP头,它包含有关用户语言首选项的信息。主流浏览器允许用户修改这些语言首选项。有关此技术的更多信息,请访问:



有些网站使用基于IP地址的地理位置,有些网站接受语言标题(可以在浏览器中设置)。无论如何,从可用性的角度来看——总是允许人们改变语言,并且永远不要在同一个IP上显示不同的内容(谷歌和其他搜索引擎不喜欢它,从SEO的角度来看这是不好的)。

这些网站经常使用通常称为“地理定位软件”的工具

最流行的软件包之一是MaxMind提供的免费数据库。这将集成到您的应用程序中,并提供IP到国家/地区的查找。使用Apache,您将拥有一些名为GEOIP_COUNTRY_CODE和GEOIP_COUNTRY_NAME的环境变量集


在此之后,您的应用程序所要做的就是根据国家/地区决定用户的位置或默认设置,并适当地重定向或输出。

您可以检查浏览器设置的默认语言,而不是检测IP地址的位置(通常由于NAT和代理而不可靠)。
有一些JQuery插件支持这一点,例如,或者使用服务器端代码读取HTTP请求头“HTTP_ACCEPT_LANGUAGE”,以确定是否要显示ES或EN站点。

您可以对此URL执行GET请求:它将以JSON格式响应某些国家/地区信息。有关用法,请参阅


如果您想自己实现它:我已经使用AWS Cloudfront进行了设置,Cloudfront在将请求转发到您可以使用的源服务器之前,会向您的请求添加一个头(Cloudfront Viewer国家/地区)。确保将Cloudfront发行版中的标题列为白名单。

我已经创建了cloud发行版,并将Cloudfront Viewer国家/地区标题列为白名单。
但当我使用这个发行版访问对象时,我并没有在请求头中看到它

我想你只是在复制和粘贴其他问题的答案(甚至可能是你自己的?!)。注意到这一点做得很好:)是的,我复制了我给另一个类似问题的答案的一部分。我编辑了这篇文章的参考。以防万一其他人感觉到似曾相识:)非常感谢。我正在下载GeoLite Country,我必须找出如何启用它;)。我会尽快通知你。再次感谢您。+1表示接受语言,这是一种比地理定位更适合选择语言的方式(即使地理定位100%准确)。但是,它应该只在服务器端完成。接受语言在客户端不可用;相反,您只能获得
导航器。[用户]语言
。但是,此设置与安装语言有关,与Accept语言不同,安装语言不便于用户配置。因此它 — 这个插件使用它 – 不应该被使用。事实上,我会这么做的:因为它简单,而且花费的时间更少。但是,许多人(包括我在内)在我们的浏览器/操作系统中使用的语言与我们实际使用的语言或国家官方语言不同。@crozer:您不应该对用户请求浏览数据时使用的语言而不是他们的位置感兴趣吗?我认为,
Accept
标题最能体现用户的意愿。@bobince:我也会选择服务器端,我提到了JQuery插件,因为这个问题没有提到任何服务器端技术,只有“html”和“javascript”。相反,你为什么不读我最后的评论:)我不想听起来粗鲁,但是既然我已经写了这个代码,你能试试吗?如果不行,我会照你说的做。我会非常感激的。谢谢,非常感谢。我现在正在下载GeoLite Country。我还将检查如何启用它,因为我对这些数据库非常陌生。如果您选择提供基于地理位置的不同语言,请考虑提供一个选项来覆盖地理位置的最佳猜测。是的