国家/地区地理位置将我重定向到错误的链接?

Posted

技术标签:

【中文标题】国家/地区地理位置将我重定向到错误的链接?【英文标题】:Country geolocation redirects me to the wrong link? 【发布时间】:2016-04-13 08:51:43 【问题描述】:

所以我有这个代码,我的 ip 来自国家/地区 ph;

<?php
require_once('geoip.inc');

$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);

switch ($country) 
 case 'ph':
     $location = 'url/ph/index.php';
     break;
 case 'us':
     $location = 'url/intl/index.php';
     break;
 case 'in':
     $location = 'url/intl/index.php';
     break;
 default:
     $location = 'url/intl/index.php';
     break;
 
 header('Location: '.$location.'');
 ?>  

每当我尝试使用该代码访问我的网站并使用我自己的家庭 IP(菲律宾)时,它都会不断地在 intl/index.php 页面上重定向我。一切都在我的主目录中,就像 geoip.inc 和 geoip.dat 一样。它们都已经在根文件夹中了。

有人知道我在这里缺少什么吗?谢谢!

【问题讨论】:

您是否验证了要解析到的 $country ?尝试回显/转储/记录该变量。 @aynber 嗯抱歉,我该如何记录呢?对这件事真的很陌生。 如果您有某种记录功能,请使用它。否则,请执行 var_dump($country) 以确保您得到您所期望的。 @aynber 我删除了我之前的评论,但我设法记录了它,它说“美国”。 1:blah 2:blahstring(2) “美国” 【参考方案1】:

函数 geoip_country_code_by_addr 以大写形式返回国家/地区代码,因此 PH、US、IN 等,当您输入切换小写国家/地区代码时,它始终包含默认数据。

所以需要把国家代码改成大写,比如

<?php
require_once('geoip.inc');

$gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);

switch ($country) 
 case 'PH':
     $location = 'url/ph/index.php';
     break;
 case 'US':
     $location = 'url/intl/index.php';
     break;
 case 'IN':
     $location = 'url/intl/index.php';
     break;
 default:
     $location = 'url/intl/index.php';
     break;
 
 header('Location: '.$location.'');
 ?>  

【讨论】:

试过了,但它仍然将我重定向到国际页面。 @Sync 请在切换前添加 var_dump($country);并将结果发布给我们。 我从 var dump 得到这个;字符串(2)“美国” @Sync 所以您的 IP 来自美国而不是 PH,并且交换机正在正确加载国际版本。请在此处查看本网站为您的 IP 提供的国家/地区checkip.com 这真的很奇怪,因为 100% 准确我的 ip 来自 ph;国家:菲律宾

以上是关于国家/地区地理位置将我重定向到错误的链接?的主要内容,如果未能解决你的问题,请参考以下文章

根据访问者 IP 地址(国家/地区)将主网站重定向到子域

WooCommerce 中多个国家/地区的基于地理位置的自定义重定向

根据 IP 位置管理重定向

Nginx返回位置

通过 PHP 使用 *** 的服务

当用户从我重定向到的远程站点返回时,我如何找到用户?