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 站点和另一个不同方面失败 - 冲突

在 magento 1.7 中管理多站点主题

如何将实时 Magento 站点复制到本地机器以测试新主题

http://magento.local 恢复到实时站点 - 适用于 OSX 的 Magento 和 Xampp

在多站点 Magento 设置上配置博客