在Magento 2中将URL子文件夹用于多语言商店视图


8

我将Magento 2配置为具有两种商店视图,以便具有两种前端语言(英语和意大利语),并且我希望具有以下行为:

http://example.com/     -->  Store View "English" (code = "en") - Default
http://example.com/it/  -->  Store View "Italian" (code = "it")

也就是说,英语商店视图应在标准URL上可用,而意大利商店视图应在URL的“ it”子文件夹中可用。没什么奇怪的,这是多语言网站的通用配置。

我在这里发现了有关Magento 1.x的非常类似的问题:子文件夹中不同的storeview或网站。但是,由于可接受的答案并非易事(涉及的重写.htaccess和的修改index.php),我想问一下Magento 2是否有更简单的方法来完成此任务?


更新

前提:我不介意拥有多个网站,所以我不存在使用相同语言的多个网站的问题(以下解决方案会出现问题)。

因此,我Add Store Code to UrlsConfiguration> Web> Url> Add Store Code to Urls中启用了该选项,它运行良好。但是现在我已经为默认语言(英语)重复了网址:

http://example.com/     -->  Store View "English" (code = "en")
http://example.com/en/  -->  Store View "English" (code = "en")
http://example.com/it/  -->  Store View "Italian" (code = "it")

有没有办法避免这种情况,即避免使用默认语言的url中的子文件夹?

Answers:


7

我最终使用了以下解决方案。我看到它是多语言Magento网站的一种非常常见的配置。

该解决方案提供了一种默认语言,该重定向具有从“普通” URL(无lang子文件夹的URL)到具有默认lang子文件夹的url的重定向。

例如,如果it是默认语言,则会发生以下情况:

example.com/         -->  example.com/it/
example.com/contact  -->  example.com/it/contact
...

1)使用lang代码创建商店视图

  • 转到商店>所有商店
  • 为每种语言创建一个商店视图
  • 代码字段中设置语言代码。
  • 示例:我有两个商店视图,代码为“ it”的Italiano(默认视图)和代码为en的英语

2)启用将商店代码添加到Urls选项

  • 商店>配置> Web>网址选项>将商店代码添加到网址>是
  • 启用此选项,我有以下几点:

    http://example.com/it/  -->  Store View "Italian" (code = "it")
    http://example.com/en/  -->  Store View "English" (code = "en")

3)在.htaccess中设置默认语言重定向

打开.htaccess和搜索以下行:

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

然后把刚刚以下行之前上面的:

############################################
## redirects for urls without lang dir to default lang (it)

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

    RewriteCond %{REQUEST_URI} !^/(it|en|admin\w*|soap|rest)($|/.*$)
    RewriteRule ^(.*)$ /it/$1 [L,R=301]

这些行会将所有不带语言子文件夹的URL重定向到/it开头带有默认子文件夹的相同URL :

example.com/contact  -->  example.com/it/contact

开头的网址en/adminsoap/rest/不重定向。

您可以对其进行自定义,更改默认的语言子文件夹并添加其他被忽略的url(每种语言代码至少一个)。

4)将根目录重定向到默认语言子目录

.htaccess搜索这些行时:

############################################
## enable rewrites

    Options +FollowSymLinks
    RewriteEngine on

然后将下面的行只是

############################################
## redirect root to default lang (it)

    RedirectMatch 301 ^/$ /it/

缺点

我使用了此解决方案,对我来说很好。我经历过的唯一真正的缺点是,.htaccess每次更新Magento时都会重写,所以我必须在更新后将其还原。

另一个缺点是,如果您有多个网站配置,并且多个网站使用的语言与此答案的注释中指出的相同,则为:https : //magento.stackexchange.com/a/197/38275


0

我有问题。假设我在一个管理员(Magento 2)下有两个URL:1)www.abc.cz-仅运行捷克语版本2)www.cde.com-当前运行EN版本

我希望在.com下拥有更多的商店视图,例如:.com / de,.com / es等,但我不想拥有直接在.com下运行的EN语言的“文件夹系统”。

如果我对某人的理解正确,那么当我开始为.com使用文件夹系统时,.cz版本将受到影响并创建.cz / cz文件夹,这对我来说是不可取的。

怎么做。感谢您的帮助。

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.