如果用户来自美国或不讲葡萄牙语的任何其他国家,我需要重定向。我的代码:
require_once('geoplugin.class.php');
$geoplugin = new geoPlugin();
$geoplugin->locate();
// create a variable for the country code
$var_country_code = $geoplugin->countryCode;
$arrCountryCode = array('BR', 'PT', 'CV', 'GW', 'AO', 'MZ', 'TL', 'ST', 'GQ');
$hasEn = explode('', $_SERVER[REQUEST_URI]);
// $geoplugin = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=".$geoplugin->ip));
// redirect based on country code && if the url has not /en && if is the first view:
if(!in_array($var_country_code, $arrCountryCode) && $hasEn[1] != 'en' && $_COOKIE['redirect'] == '') {
setcookie('redirect', 'true'); //allow to delete /en
header('Location: http://'.$_SERVER[HTTP_HOST].'/en'.$_SERVER[REQUEST_URI]);
}
}
每个人都将重定向到/ en,即使它来自巴西。我的代码有什么问题?
P.S。使用geoplugin library。
答案 0 :(得分:2)
请打开PHP错误和警告的显示:error_reporting(E_ALL);
您可能会看到geoplugin的错误,例如:
错误geoPlugin类错误:无法检索数据。要么编译具有cURL支持的PHP,要么在第137行的php.ini中启用allow_url_fopen
$hasEn = explode('', $_SERVER[REQUEST_URI]);
此代码会将变量$hasEn
设置为false
(并产生警告),因为您使用的是空定界符。
然后,$hasEn[1] != 'en'
将始终取值为true
。因此,也将不必要地从en
站点重定向用户一次。
答案 1 :(得分:0)
您的重定向经过硬编码,可以将人们定向到/ en:
header('Location: http://'.$_SERVER[HTTP_HOST].'/en'.$_SERVER[REQUEST_URI]);
代替使用返回值$var_country_code
应该看起来更像这样:
header('Location: http://'.$_SERVER[HTTP_HOST].'/'.$var_country_code.'/'.$_SERVER[REQUEST_URI]);