更改为SSL域会丢失子域多存储设置中的语言(Magento)

时间:2012-11-21 10:09:28

标签: php magento cookies ssl

我有以下Magento多店铺设置:

  • german.domain.com
  • english.domain.com
  • french.domain.com

所有人都在使用

  • secure.domain.com

作为SSL域。购物车和一切工作正常,除了语言回归英语!

如果我在german.domain.com(商店语言是德语),我点击结帐,商店将被定向到secure.domain.com。我在german.domain.com上添加的产品已经存在,但语言不再是德语。它回归英语!它不处理cookie域设置,否则将不会共享购物车中的产品。

有没有人有想法或已经解决了这个问题。我认为必须有一个智能编码来解决这个问题。

感谢名单

解决方案:Franklin P Strube提供了正确的解决方案,但我在index.php中用PHP硬编码:

$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

if($_SERVER['SERVER_NAME'] != 'secure.domain.com' && isset($_SERVER['HTTP_REFERER'])) {
  $url = parse_url($_SERVER['HTTP_REFERER']);
  if($url['host'] == 'german.domain.com') {
    setcookie('language', 'german', 0, '/', '.domain.com');
  } elseif($url['host'] == 'french.domain.com') {
    setcookie('language', 'french', 0, '/', '.domain.com');
  } else {
    setcookie('language', 'english', 0, '/', '.domain.com');
  }
}

if($_SERVER['SERVER_NAME'] == 'secure.domain.com') {
  if(isset($_COOKIE['language'])) {
    $mageRunCode = $_COOKIE['language'];
  }
}

Mage::run($mageRunCode, $mageRunType);

2 个答案:

答案 0 :(得分:2)

当您进行多店铺设置时,通常会有像SetEnvIf Host german.domain.com MAGE_RUN_CODE=domain_com_de这样的.htaccess规则。您在多店的.htaccess文件中有什么用?

我的猜测是Magento正在使用英语,因为默认网站/商店会在您访问secure.domain.com时随时加载。您可以通过在文件的最后一行({1}}上方添加Mage::log("$mageRunCode $mageRunType");来验证这一点。确保在系统中启用了日志记录>配置>开发人员区域,然后检查magento / var / system.log中记录的内容。以下解决方案可以帮助您实现您想要的目标。

解决方案#1 在“系统>配置>常规>网络”中更改“将商店代码添加到网址”设置可能会解决此问题,但可能会导致网页混乱

解决方案#2 我不记得Magento如何处理语言切换(可能有一个神奇的查询字符串var为你做这个),但如果你想以编程方式执行此操作,可以通过cookies和ENV vars在htaccess中完成所有工作:

Mage::run($mageRunCode, $mageRunType);

答案 1 :(得分:-1)

你能告诉我你如何实现

我有以下Magento多店铺设置:

german.domain.com
english.domain.com
french.domain.com

所有人都在使用

secure.domain.com

作为SSL域。

我们在根目录中创建了多个网站,并通过相应的代码在admin中创建网站。

但是当我们去买一个产品时,我们得到一个页面找不到错误...