我目前有一个Magento项目,客户想要一个相当简单的GeoIP解决方案,我们尝试了一些模块,但都很笨重,凌乱,并在其他地方引起了错误。
我最后使用GeoIP php库和.dat文件,只在index.php中创建一个语句,将其他用户重定向到/ us和/ eu文件夹,这些文件夹中有index.php文件,这些文件加载了相关的商店。看起来像这样
/########### GEOIP ############//
$geoipPath = 'includes/geoip.inc';
include($geoipPath);
$gi = geoip_open("includes/GeoIP.dat",GEOIP_STANDARD);
$ip = $_SERVER['REMOTE_ADDR'];
$country_code = geoip_country_code_by_addr($gi, $ip);
$euArray = array('DE','FR','AT','BE','HR','CY','CZ','DK','EE','FI','GR','HU','IS','IE','IT','LU','MD','MC','NL','NO','PL','PT','RO','RU','SK','SI','ES','SE','CH','UA','VA');
if(strtoupper($country_code) == "US"){
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : 'us_site';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'website';
Mage::run($mageRunCode, $mageRunType);
}elseif(in_array(strtoupper($country_code),$euArray)){
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : 'eu_site';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'website';
Mage::run($mageRunCode, $mageRunType);
}else{
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);
}
除了发送时事通讯以及链接太http://example.com/our-new-offers.html
的情况时,这种情况很有效当美国/欧盟客户点击此链接时,他们只是被重定向到主页,有人知道如何绕过这个吗?
由于
答案 0 :(得分:3)
如果你已经在子目录上设置了其他商店,你不能只是将它们重定向到另一个商店并附加URI吗?
上面的代码:
if(strtoupper($country_code) == "US"){
header('Location: http://example.com/us' . $_SERVER['REQUEST_URI']);
}
elseif(in_array(strtoupper($country_code),$euArray)){
header('Location: http://example.com/eu' . $_SERVER['REQUEST_URI']);
}else{
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);
}