2012-01-06 73 views
2

我一直在尝试几个小时,以获得一个不同的存储显示基于子目录。我们为Magento设立的舞台网站适用于世界其他地区,美国,​​英国和澳大利亚的商店,它们之间存在各种差异。我们通过在.htaccess中设置环境变量来工作(我将仅使用基本和澳大利亚商店,以便简化),然后在index.php文件中使用它来加载正确的商店。Magento网站切换.htaccess

SetEnvIf Host staging\.hostname\.com MAGE_RUN_CODE=base 
SetEnvIf Host staging\.hostname\.com MAGE_RUN_TYPE=store 

SetEnvIf Host staging-au\.hostname\.com MAGE_RUN_CODE=au 
SetEnvIf Host staging-au\.hostname\.com MAGE_RUN_TYPE=website 

现在我一直在负责改变这种使用子目录,所以staging.hostname.com/au/,不管我把不起作用。

我已将配置中不同商店的基础网址更改为指向澳大利亚商店的staging.hostname.com/au/。从我可以看到它不是拿起我的新的.htaccess线

SetEnvIf Request_URI "^/au/.*" MAGE_RUN_CODE=au 
SetEnvIf Request_URI "^/au/.*" MAGE_RUN_TYPE=website 

我试着和不带引号的正则表达式,有和没有任何通配符(*),并没有喜悦。

我确实删除/注释掉了SetEnvIf主机行,否则它可能会导致问题,因为我设置了两次环境变量。

如果我将旧url指向商店(staging-au.hostname.com),则Magento将重定向到商店的staging.hostname.com/au基本URL(这意味着旧的.htaccess信息起作用) ,但它然后默认回到基本商店值,并给我一个404错误。

任何帮助将不胜感激。

Apache版本2.2.21如果有帮助。

+0

让您的生活更轻松:http://blog.speedupmate.com/post/9992573819/poor-mans-multisite-setup-for-magento – 2012-01-06 07:39:47

回答

2

这将取决于您如何设置美国,英国等。假设它们设置为商店,您应该只需启用系统>配置> Web> URL选项>将商店代码添加到Urls,而不是必须通过.htaccess解决您的request_uri问题。

+0

如果我们想正确,这一套东西是我们应该做的。由于这是对已经发生的一切的最后一刻改变,所以太晚了。 现在我们已经使用子域:) – BenFreke 2012-01-08 01:36:51

1

或者你可能根本就不打扰明确的商店代码。如果您使用GEOIP在index.php中获取两个字母的国家/地区代码,则可以使用简单的开关/案例/结构来设置商店代码变量或网站代码,然后调用主程序。如果你这样做,那么你不必在URL中有商店代码。

$country=$_SERVER['GEOIP_COUNTRY_CODE']; 
//if (isset($_COOKIE['geocountry'])) $country=$_COOKIE['geocountry']; 

switch ($country) 
{ case "CA": case "MX": case "US": 
$_SERVER['MAGE_RUN_CODE'] = "usd"; 
$_SERVER['MAGE_RUN_TYPE'] = "website"; 
break; 
    case "AT": case "BE": case "CY": case "DE": case "ES": case "FI": case "FR": case "GR": case "IE": case "IT": case "LU": case "MT": case "NL": case "SI": 
$_SERVER['MAGE_RUN_CODE'] = "eur"; 
$_SERVER['MAGE_RUN_TYPE'] = "website"; 
break; 
    case "BG": case "CZ": case "DK": case "EE": case "HU": case "LV": case "PL": case "RO": case "SE": 
$_SERVER['MAGE_RUN_CODE'] = "eugbp"; 
$_SERVER['MAGE_RUN_TYPE'] = "store"; 
break; 
    case "GB": 
$_SERVER['MAGE_RUN_CODE'] = "gbp"; 
$_SERVER['MAGE_RUN_TYPE'] = "website"; 
break; 
    case "AX": 
$_SERVER['MAGE_RUN_CODE'] = "staging"; 
$_SERVER['MAGE_RUN_TYPE'] = "store"; 
break; 
    default: 
$_SERVER['MAGE_RUN_CODE'] = "row"; 
$_SERVER['MAGE_RUN_TYPE'] = "store"; 
} 

请注意,您需要cookie/ip地址或其他机制来覆盖地理ip以进行测试。对于不同的商店或任何不同的子目录,您不需要不同的URL。您仍然可以以不同的方式为每个商店设定主题,并在网站级别使用不同的货币。

+0

这基本上是GeoIP扩展已经做的。但是你的回答让我意识到我在没有受到它影响的网站的白名单中......所以我认为那是我遇到的一半问题。谢谢。 – BenFreke 2012-01-08 01:50:04

2

在某些服务器上,SetEnvIf指令在.htaccess文件中无法识别。

当处理.htaccess中的重定向时,环境变量也有点有趣,特别是当您在以子目录运行的.htaccess文件中重定向时。

Apache实际上会通过在其前面添加“REDIRECT_”来重命名环境变量。

为了让它像你想要的那样工作,请删除SetEnvIf指令,并在Magento根目录下的“#RewriteBase/magento /”中添加以下内容。htaccess文件:

RewriteCond %{REQUEST_URI} ^/au/.* [NC,OR] 
RewriteCond %{REQUEST_URI} ^/au$ [NC] 
RewriteRule .* - [E=MAGE_RUN_CODE:au] 
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+) 
RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:website]