子文件夹中的不同storeview或网站


29

客户希望像这样建立他的多店商店:

这是一个示例,但是可能会有更多不同的子文件夹。处理不同商店视图/网站的不同子文件夹的最佳方法是什么?

我知道一种解决方案是创建名为等的子文件夹deen然后将index.php和.htaccess复制到相应的子文件夹中。

可能也有一些解决方法(用于index.php的符号链接,用于配置vHost而不是使用.htaccess的文件)​​以最大程度地减少文件重复,但是我想找到一种解决方案,无需在文件系统中进行任何更改,而只是通过配置处理一切。


更新

我们在企业支持下验证了最好的方法是创建子文件夹。

我们最终这样做是这样的:

  • 创建一个“ languagefolders”目录
  • 在目录内创建index.php的副本,以及调整后的.htaccess和指向Magento文件夹的符号链接(应用/,错误/,...)
  • 在Magento根目录内创建指向“ languagefolders”目录的符号链接“ de”,“ en”等

这样,我们可以通过创建新的符号链接(例如“ fr”)来添加新的语言。


我们这样做只是为了发现网站找不到任何产品或类别(Magento 404 /无页面访问路径)。你也遇到过吗?
snh_nl 2015年

据我所记得,抱歉。您是否重新创建了所有索引?
Matthias Zeis 2015年

我们使用nginx,并且必须对conf进行更新以使其正常工作。我将更新我的评论
snh_nl 2015年

2个更奇怪的东西。1)/ checkout返回404和2)语言选择器:如果我单击英语,然后再次单击英语,我们会看到uri不断添加/ en / en / en / etc ....您选择了什么作为基本URL?domain.com/en或didi您将其保留为domain.com
snh_nl

我们选择了domain.com/en/。
马提亚斯·蔡斯

Answers:


18

根据URL提供多个域/路径非常容易。如前所述,当唯一core/store代码可以在路径中用作子文件夹时最简单的设置(仅配置)是可能的。这需要以下之一:

  1. 访问者最初链接到正确的子文件夹路径
  2. 会为访问者提供一个登陆页面,供他们选择商店并接收Cookie。
  3. 在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抽调了环境变量和子文件夹,如以下所示 这个出色的SO回答。前两行产生结果,$_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';而后两行提供所需的结果$_SERVER["MAGE_RUN_CODE"] = 'deutsch';。还有很多其他的技巧,但是上面已经使我难过了。

最终目标应该是尽可能合理地进行初始检测(地理+多语言问题),同时让用户设置商店Cookie,该Cookie可以用来绕过/逐步遍历后续请求中的逻辑。


1
谢谢,本 这样,我可以初始化商店视图,但是我总是会得到Magento 404页面(“糟糕,糟糕”)。我的基本URL设置为domain1.org/endomain.org/de等。皮肤URL,媒体URL等设置为domain.org/(skin | media | ...)。请注意,如果我使用常规的“ copy index.php和.htaccess”方法,则会返回正确的页面。
Matthias Zeis 2013年

我接受了这个答案,因为它与我们要完成的工作最接近(即使我们为特殊要求解决了一些不同的问题)。
Matthias Zeis 2013年

令“将商店代码添加到URL”设置不起作用感到非常惊讶。
benmarks

商店代码必须唯一。它应如何与所有以de /,fr /或en /结尾的商店视图一起使用?
Matthias Zeis 2013年

我想我错过了复制商店代码,但我认为我是假设一些Web服务器为基础的重写(例如mode_rewrite)基于HTTP_HOST+子文件夹级别1
benmarks

9

如果缩进的URL(子文件夹)可以具有与商店代码相同的名称(为什么不这样),则可以简单地启用Configuration > Web > Url options > Add Store Code to Urls


正确,那么您甚至不需要子文件夹。只要启用了URL重写,Magento就会知道“ en”是商店视图代码,而不会查找子文件夹。
Paul Grigoruta

8
这种解决方案的问题在于,Magento在Magento安装中仅允许一个商店代码“ de”。因此,如果您有多个使用相同语言的网站,则必须使用不同的商店代码,例如de_de,de_en,...
therouv 2013年

2
鲁文知道了。问题是您不能有多个具有相同商店代码的商店。
AnnaVölkl2013年

是的,问题是,正如Rouven所说,您不能使用相同的商店代码来拥有两个商店视图。
Matthias Zeis 2013年

我确认Rouven做对了。向Magento报告了一个错误。因为在这些现代环境中,杂货店更多,这应该可以工作。但是,您认为可以进行Add store codes to url商店视图设置吗?magento.stackexchange.com/questions/60686/…=假设有1个具有sep域的多商店,其他使用/ en和/ fr
snh_nl 2015年

3

我们最终确实做到了

我们在企业支持下验证了最好的方法是创建子文件夹。

我们最终这样做是这样的:

  • 创建一个“ languagefolders”目录
  • 在目录内创建index.php的副本,以及调整后的.htaccess和指向Magento文件夹的符号链接(应用/,错误/,...)
  • 在Magento根目录内创建指向“ languagefolders”目录的符号链接“ de”,“ en”等

这样,我们可以通过创建新的符号链接(例如“ fr”)来添加新的语言。

在后端,我们将商店设置base urldomain.com/en

如果您使用nginx,则必须对位置处理进行更新,以便在新的子文件夹中也处理index.php。这需要为每个新的翻译文件夹完成


snh_nl您是否有机会解释最后两行的含义?我遇到了您之前说过的同样问题,但我无法理解:如果您使用nginx,则必须对位置处理进行更新,以便在新的子文件夹中也处理index.php。这需要为每个新的翻译文件夹完成。我正在使用Nginx,并且尝试这样做。谢谢
vbak '16

location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl

2

Magento官方知识库中有一个条目对此进行了精确描述。

如果您使用的是Apache,请确保(每个域的)所有虚拟主机条目都指向Magento安装所在的同一文档根目录。这是针对多个域的。

接下来(也是最后一个)是.htaccess同一Magento安装文件夹中。.htaccess是功能强大的目录级配置文件,您可以在其中为每个服务器请求设置规则操作。因此,您将需要在那里处理所有不同的(子)域/文件夹操作,并设置Magento在初始化阶段使用的正确服务器变量。

服务器配置完成后,您将必须在Magento管理员(系统-配置-常规-网络)中为每个商店设置不同的基本路径。

因此,请确保您遵循官方指南(这也是首选的方式),并且事情应该顺利进行。


1
问题不在于多个域。
Fabian Schmengler 2013年

问题是关于具有多个域的多商店设置(.org和.ch是不同的域)。但这并不重要,因为提供的答案描述了多商店设置的解决方案,无论您的每个商店都具有多个域,子域还是仅具有不同的子文件夹。
Jernej Golja 2013年

1
但是重点放在商店视图的路径上,听起来好像域不是问题。无论如何,在您进行编辑后,我更改了投票。
Fabian Schmengler 2013年

1
确实,问题不在于必须使用多个域,而是几个商店必须共享相同的路径/“子文件夹”,而这不能通过向URL添加商店代码来实现。
Matthias Zeis 2013年

-2

首先,您必须在Magento管理面板中进行一些配置,然后创建一个子目录,并将index.php和.htaccess移至该子目录,并对index.php进行一些小的更改。

是如何执行此操作的完整示例。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.