以下是我目前正在使用的代码:
require_once('geo/geoip.inc');
$gi = geoip_open('geo/GeoIP.dat', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
geoip_close($gi);
if ($country == 'FR') {
header('Location: http://fr.mysite.com');
}
if ($country == 'US') {
header('Location: http://us.mysite.com');
}
在几个静态(html + javascript)病毒式网站上,每天带来大约100,000名访问者,有时会更多,有时甚至更少。
是否有更好的(和免费的)解决方案可以根据国家/地区进行重定向?我最近从专用服务器切换到VPS,当前的代码似乎使用了大量的CPU使用(或者我的主机告诉我)。我可能只是回到专用服务器,但我仍然想知道是否有更好的方法,不会给服务器带来太多压力。
另外,因为我根据语言重定向:
// french
if ($country == 'FR') {
header('Location: http://fr.mysite.com');
}
//french
if ($country == 'BE') {
header('Location: http://fr.mysite.com');
}
//french
if ($country == 'CA') {
header('Location: http://fr.mysite.com');
}
//english
if ($country == 'US') {
header('Location: http://us.mysite.com');
}
//english
if ($country == 'UK') {
header('Location: http://us.mysite.com');
}
现在非常累,有什么更好的方法?这个或不:
//english
if ($country == 'US') || ($country == 'CA') {
header('Location: http://us.mysite.com');
}
因此,任何访问美国或加拿大的人都会被重定向到google.com
提前致谢
答案 0 :(得分:0)
编辑:来源最终成为answer to the duplicate question。
如果网站之间的唯一区别是语言而与其实际国家无关,则应根据首选语言重定向。
然而,这变得非常复杂,因为HTML标题可以包含多种语言,某些语言优于其他语言。我发现了一段时间的解决方案,遗憾的是找不到原始资源是制作可用语言列表,用HTML优先顺序解析HTML Header中的语言,并根据要遵循的重定向确定: / p>
我不会拥有prefered_language()功能,也不会在创作中占据任何一部分! 但我无法在任何地方找到原件......如果其他人能够,请将其链接起来......
$available_languages = array("en", "fr");
$default_language = "en";
function prefered_language($available_languages, $http_accept_language) {
global $default_language;
$available_languages = array_flip($available_languages);
$langs = array();
preg_match_all('~([\w-]+)(?:[^,\d]+([\d.]+))?~', strtolower($http_accept_language), $matches, PREG_SET_ORDER);
foreach($matches as $match) {
list($a, $b) = explode('-', $match[1]) + array('', '');
$value = isset($match[2]) ? (float) $match[2] : 1.0;
if(isset($available_languages[$match[1]])) {
$langs[$match[1]] = $value;
continue;
}
if(isset($available_languages[$a])) {
$langs[$a] = $value - 0.1;
}
}
if($langs) {
arsort($langs);
return key($langs);
} else {
return $default_language;
}
}
if(isset($_COOKIE["client_lang"])){
$lang = $_COOKIE["client_lang"];
}else{
$lang = prefered_language($available_languages, strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
setcookie("client_lang", $lang, time() + (86400 * 30 * ), "/");
}
header('Location: http://' . $lang . '.mysite.com');
我还建议像我上面所做的那样为客户端的首选语言创建一个cookie,因为这个功能仍然需要一些CPU使用。