Magento 站点切换.htaccess
Posted
技术标签:
【中文标题】Magento 站点切换.htaccess【英文标题】:Magento site switching .htaccess 【发布时间】:2012-02-03 23:04:22 【问题描述】:我已经尝试了几个小时来根据子目录显示不同的商店。我们为 Magento 设置的临时站点适用于世界其他地区、美国、英国和澳大利亚的商店,它们之间存在各种差异。我们通过在 .htaccess 中设置环境变量来实现这些工作(为了简洁起见,我将使用基础和澳大利亚商店),然后在 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/ 以及我输入的任何内容都不起作用。
我已将配置中不同商店的基本 URL 更改为指向澳大利亚商店的 staging.hostname.com/au/。据我所见,它没有选择我的新 .htaccess 行
SetEnvIf Request_URI "^/au/.*" MAGE_RUN_CODE=au
SetEnvIf Request_URI "^/au/.*" MAGE_RUN_TYPE=website
我试过带引号和不带引号的正则表达式,带和不带通配符的任何东西 (.*) 都没有。
我确实确保删除/注释掉 SetEnvIf Host 行,否则它可能会导致问题,因为我设置了两次环境变量。
如果我将旧 url 指向商店 (staging-au.hostname.com),那么 Magento 会重定向到商店的基本 URL staging.hostname.com/au(这意味着旧的 .htaccess 信息有效),但随后它默认返回到基本存储值并给我一个 404 错误。
任何帮助将不胜感激。
Apache 版本 2.2.21,如果有帮助的话。
【问题讨论】:
让您的生活更轻松:blog.speedupmate.com/post/9992573819/… 【参考方案1】:这将取决于您如何设置美国、英国等。假设它们设置为商店,您应该能够简单地启用系统 > 配置 > Web > URL 选项 > 将商店代码添加到 URL,而不是通过 .htaccess 处理你的 request_uri。
【讨论】:
如果我们设置正确,这就是我们应该做的。因为这是对已经发生的一切的最后一刻改变,所以为时已晚。现在我们已经使用子域了:)【参考方案2】:或者您根本就不用担心拥有明确的商店代码。如果您使用 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 地址或其他机制来覆盖地理 IP 以进行测试。对于不同的商店或任何不同的子目录,您不需要不同的 URL。您仍然可以为每家商店设置不同的主题,并在网站级别使用不同的货币。
【讨论】:
这基本上是 GeoIP 扩展已经在做的事情。但是你的回答让我意识到我在不受它影响的网站的白名单中......所以我认为这是我遇到的问题的一半。谢谢。【参考方案3】:在某些服务器上,SetEnvIf 指令在 .htaccess 文件中无法识别。
在处理 .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]
【讨论】:
以上是关于Magento 站点切换.htaccess的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 facebook 应用程序让 magento 多商店工作
Paypal IPN 在 Magento 站点和另一个不同方面失败 - 冲突