我一直在尝试使用几个小时来根据子目录显示不同的商店。我们为Magento设立的中转站点是为世界其他地区,美国,英国和澳大利亚的商店设置的,它们之间存在各种差异。我们已经在.htaccess中设置了环境变量(我将仅为了简洁而使用base和Australian商店),然后在index.php文件中使用它来加载正确的商店。
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主机行,否则它可能会导致问题,因为我将环境变量设置了两次。
如果我将旧网址指向商店(staging-au.hostname.com),那么Magento会重定向到商店的staging.hostname.com/au基本网址(这意味着旧的.htaccess信息有效),但它会默认返回基本商店值并给我404错误。
非常感谢任何帮助。
Apache版本2.2.21如果有帮助的话。
答案 0 :(得分:3)
在某些服务器上,.htaccess文件中无法识别SetEnvIf指令。
在处理.htaccess中的重定向时,环境变量也有点滑稽,特别是当您在子目录中运行的.htaccess文件中重定向时。
Apache实际上会通过在其前面添加“REDIRECT_”来重命名环境变量。
为了让它按你想要的方式工作,删除SetEnvIf指令并在Magento的根.htaccess文件中添加以下“#RewriteBase / magento /”:
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]
答案 1 :(得分:2)
这将取决于您如何设置美国,英国等。假设它们已设置为商店,您应该只需启用系统>配置>网络>网址选项>将商店代码添加到Urls,而不必通过.htaccess来处理您的request_uri。
答案 2 :(得分:1)
或者你可能根本就没有明确的商店代码。如果您使用GEOIP在index.php中获取双字母国家/地区代码,您可以使用简单的switch / case / if构造来设置商店代码变量或网站代码,然后调用主程序。如果您这样做,那么您不必在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地址或其他机制来覆盖geo-ip以进行测试。对于不同的商店或任何不同的子目录,您不需要不同的URL。您仍然可以以不同方式对每家商店进行主题设置,并在网站级别使用不同的货币。