子文件夹中的不同店面或网站
-
16-10-2019 - |
题
客户希望他的Multistore商店这样建立:
- http://www.domain1.org/de/ - >网站1,商店查看1
- http://www.domain1.org/en/ - >网站1,商店查看2
- http://www.domain1.ch/de/ - >网站2,商店查看3
- http://www.domain1.ch/fr/ - >网站2,商店查看4
- http://www.domain1.ch/it/ - >网站2,商店查看5
- ...
这是一个例子,但可能还有更多不同的子文件夹。处理不同商店视图 /网站的不同子文件夹的最佳方法是什么?
我知道一种解决方案是创建称为的子文件夹 de
, en
等。并将索引和.htaccess复制到相应的子文件夹中。
也可能有一些解决方法(index.php的符号链接,vhost配置而不是使用.htaccess)来最小化文件重复,但我想找到一个解决方案,我不必在文件系统中进行任何更改,而只是只做任何更改通过配置处理所有内容。
更新
我们通过企业支持验证了这一点的最佳方法是创建子文件夹。
我们最终这样做了:
- 创建一个“语言文件”目录
- 在目录内创建了index.php的副本,以及调整后的.htaccess和符号链接到Magento文件夹(app/,errors/,...)
- 创建的Symlinks“ de”,“ en”等。在Magento根目录中指向“ Language Folders”目录
这样,我们可以通过创建新的符号链接(例如“ FR”)来添加新语言。
解决方案
根据URL提供多个域/路径非常容易。如前所述, 当唯一时,最简单的设置(仅配置)是可能的 core/store
代码可以在路径中用作子文件夹. 。这需要以下一个:
- 访问者最初链接到正确的子文件夹路径
- 访客提供了一个着陆页,他们从中选择商店并收到cookie
- 某些机制用于在PHP处理响应之前设置运行类型和运行代码
关于#3:由于1.4 Magento,因此可以允许Web服务器确定运行上下文(网站 或者 店铺)以及应使用的特定代码。从 index.php:
/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);
尽管环境变量用于初始化应用程序,但可能会在PHP旋转之前影响系统。与Apache和 mod_rewrite
这可以为具有一些骗子的子文件夹做到:
RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]
Apache对环境变量和子文件夹的抽搐,如 这个很好的答案. 。最初的两行导致 $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';
后两条线提供所需的 $_SERVER["MAGE_RUN_CODE"] = 'deutsch';
. 。还有许多其他技巧,但是以上以前咬了我。
最终目标应该是合理的初始检测(GEOIP +多语言问题),同时让用户设置商店cookie,该cookie可以用来在后续请求中绕过/逐步浏览逻辑。
其他提示
如果缩进的URL(子文件夹)可以具有与商店代码相同的名称(为什么不?),则可以简单地启用 Configuration > Web > Url options > Add Store Code to Urls
.
我们最终做到了
我们通过企业支持验证了这一点的最佳方法是创建子文件夹。
我们最终这样做了:
- 创建一个“语言文件”目录
- 在目录内创建了index.php的副本,以及调整后的.htaccess和符号链接到Magento文件夹(app/,errors/,...)
- 创建的Symlinks“ de”,“ en”等。在Magento根目录中指向“ Language Folders”目录
这样,我们可以通过创建新的符号链接(例如“ FR”)来添加新语言。
在后端,我们设置了商店 base url
至 domain.com/en
如果您使用nginx,您的位置处理需要更新来处理新的子文件夹中的index.php。每个新的翻译文件夹都需要完成此操作
有一个 进入官方Magento知识库 这完全描述了这一点。
如果您正在使用Apache,请确保所有虚拟主机条目(对于每个域)都指向Magento安装所在的同一文档根。那是针对多个域。
下一个(也是最后一件事)是 .htaccess 在同一Magento安装文件夹中。 .htaccess是一个功能强大的目录级配置文件,您可以在其中每个服务器请求设置规则行为。因此,您将需要处理所有不同的(子)域/文件夹操作,并设置Magento在初始化阶段使用的正确服务器变量。
完成服务器配置后,您将必须为Magento Admin(System -System -Configuration -enstry -Web)中的每个商店设置不同的基本路径。
因此,请确保您遵循官方指南(这也是首选的方式),并且事情应该顺利进行。
首先,您必须在Magento Admin面板中进行一些配置,然后创建一个子目录,然后将index.php和.htaccess移动到子目录中,然后对index.php进行一些较小的更改。
这里 是如何做到这一点的完整示例。