使用GeoIp2只需一次PHP重定向
我正在使用MaxMind的GeoIp2 PHP根据国家重定向网站访问者 我已设法使重定向正常工作,以便:使用GeoIp2只需一次PHP重定向,php,redirect,geoip,Php,Redirect,Geoip,我正在使用MaxMind的GeoIp2 PHP根据国家重定向网站访问者 我已设法使重定向正常工作,以便: 美国游客前往http://www.example.com/us 马来西亚游客前往http://www.example.com/my 所有其他访客进入http://www.example.com 问题是我只想重定向访问者一次。 在他们进入网站后,如果他们导航到http://www.example.com 他们应该能够做到这一点,而不必改变方向,不管他们的国家是什么 这样,人类和蜘蛛仍然可以自由
美国游客前往
http://www.example.com/us
马来西亚游客前往
http://www.example.com/my
所有其他访客进入
http://www.example.com
问题是我只想重定向访问者一次。
在他们进入网站后,如果他们导航到http://www.example.com
他们应该能够做到这一点,而不必改变方向,不管他们的国家是什么
这样,人类和蜘蛛仍然可以自由访问不针对本国的网页
我试着用这个建议来解决一个与我所回答的问题相似的问题
但问题在于不同国家的不同领域,而不是不同的路径,所以解决方案对我不起作用
代码:
<?php
require_once '../vendor/autoload.php';
use GeoIp2\Database\Reader;
$reader = new Reader('/usr/local/share/GeoIP/GeoLite2-Country.mmdb');
$record = $reader->country( $_SERVER['REMOTE_ADDR'] );
try {
$country = $record->country->isoCode;
switch((string)$country) {
case 'US':
$url = "http://www.example.com/us";
break;
case 'MY':
$url = "http://www.example.com/my";
break;
default:
$url = "http://www.example.com";
}
if (strpos("http://$_SERVER[HTTP_HOST]", $url) === false)
{
header("Location: ".$url);
}
} catch (Exception $e) {
// Handle exception
}
?>
非常感谢您的帮助。您可以使用cookie跟踪:
<?php
require_once '../vendor/autoload.php';
use GeoIp2\Database\Reader;
$cookie_name = "country_code";
session_start();
if (isset($_GET['check']) && $_GET['check'] == true) {
if (isset($_COOKIE['test_cookie']) && $_COOKIE['test_cookie'] == 'test') {
if(!isset($_COOKIE[$cookie_name])) {
$reader = new Reader('/usr/local/share/GeoIP/GeoLite2-Country.mmdb');
$record = $reader->country( $_SERVER['REMOTE_ADDR'] );
try {
$country = $record->country->isoCode;
switch((string)$country) {
case 'US':
$url = "http://www.example.com/us";
break;
case 'MY':
$url = "http://www.example.com/my";
break;
default:
$url = "http://www.example.com";
}
$cookie_value = "" . (string)$country;
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
if(!isset($_GET['cookies'])){
header('Location:/info.php?cookies=true');
}
if (strpos("http://$_SERVER[HTTP_HOST]", $url) === false)
{
header("Location: ".$url);
}
} catch (Exception $e) {
// Handle exception
}
} else { //cookie is set no redirect
}
} else { //no cookie support, no redirect
}
} else {
setcookie('test_cookie', 'test', time() + 3600);
header("location: {$_SERVER['PHP_SELF']}?check=true");
}
?>
谢谢你的建议!我已经尝试过你的解决方案,但是美国访问者仍然会被重定向到/US站点。我认为问题可能在于以下代码部分,尽管我不是100%确定:如果(strpos(“http://$\u SERVER[http\u HOST]”,$url)===false){header(“Location:”.$url);}设置cookie后,它们根本不应该被重定向,它们应该转到代码的“//cookie is set no redirect”部分。如果用户浏览器未启用Cookie,则他们将一直被重定向。没错,在运行测试时使用Chrome删除Cookie时出现了一些问题。用Safari(更容易删除/检查cookie)测试了你的解决方案,一切都很顺利。我添加了一个“cookie支持”检查,但它添加了一个重定向以检测,灵感来自:对于Chrome,你只需要检查页面,切换到资源选项卡,展开cookie,单击你的域,单击cookie,然后右键单击删除