重定向国家/地区脚本无效

时间:2014-02-15 15:05:32

标签: php redirect geo

我想要一点帮助

首先,我从这里下载了MaxMind的GeoIP.dat数据库

然后我从这里下载了geoip.inc

然后我将这两个文件上传到我的页面所在的同一目录。

我编辑了我的php页面,并在其中编写了这个脚本:

<?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);

$my_countries = array('us', 'ca', 'gb', 'fr', 'de', 'nl');
if (!in_array(strtolower($country), $my_countries))
{
header('Location: http://"ALL"TRAFFICURLGOESHERE.whatever');
}
else
{
header('Location: http://"SELECTEDCOUNTRIES"URLGOESHERE.whatever');
}
?>  

这是伟大的工作!

BUT

我想要这样的事情:

  • 国家/地区A用户重定向到W url
  • 国家/地区B用户重定向到X网址
  • 国家/地区C用户重定向到Y url
  • 国家/地区D用户重定向到Z url

剩下的国家/地区用户会重定向到我想要的相同网址。

任何人都可以使用2-3个国家/地区的示例编辑此PHP代码到不同的URL并保留到我想要的其他URL,这样我就可以学习如何在该代码中添加更多其他(超过4个国家/地区)的国家/地区,因为我我真的不擅长php或html。

我试过这个(下面的代码)但是还没有工作

<?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);
$my_countries = 'us';
if (strtolower($country) == $my_countries) {
header('Location: example.us');
}
$my_countriess = 'nz';
if (strtolower($country) == $my_countriess) {
header('Location: example.co.nz);
}
$my_countriesss = 'uk';
if (strtolower($country) == $my_countriesss) {
header('Location: example.co.uk');
}
$my_countriessss = 'ca';
if (strtolower($country) == $my_countriessss) {
header('Location: example.ca');
}
?>

2 个答案:

答案 0 :(得分:0)

  

我想要这样的内容:国家A用户重定向到W url ...剩下的国家/地区用户重定向到我想要的相同网址。

由于您是PHP的新手,听起来您想要使用一系列简单的if语句?

if ($country === "us"){
    // redirect to US
} else if ($country === "nz"){
    // redirect to nz
} else if ($country === "..."){
    // continue specifically targeting country codes
} else {
    // redirect to everywhere else if none of the above match
}

当您接听时,您可能需要使用strtolower()以便字符串匹配。

答案 1 :(得分:0)

您可以使用switch ... case

示例:

switch ($country) {
     case 'us':
         $location = 'USURL';
         break;
     case 'uk':
         $location = 'UK URL';
         break;
     case ...
     ...
     default:
         $location = 'other countries url';
         break;
}
header('Location: $location');

有关switch声明

的更多信息,请参阅http://www.php.net/manual/en/control-structures.switch.php

编辑: 在你的第二个代码中,分号丢失了:

header('Location: example.co.nz);

应该是

header('Location: example.co.nz');