Magento 2で多言語ストアビューにURLサブフォルダーを使用する


8

2つのフロントエンド言語(英語とイタリア語)を使用するために、2つのストアビューでMagento 2を構成しました。次の動作が必要です。

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

つまり、英語のストアビューは標準のURLで利用可能であり、イタリア語のストアビューはURLの「it」サブフォルダー内で利用可能である必要があります。何も奇妙なことではありません。多言語Webサイトの一般的な構成です。

私はMagento 1.xに関して非常によく似た質問を見つけました:サブフォルダー内の異なるストアビューまたはWebサイト。しかし、受け入れられた答えは簡単ではないので(での書き換え.htaccessと変更が含まれますindex.php)、Magento 2を使用してこれを行う簡単な方法があるかどうかを確認したいと思います。


更新

前提:複数のWebサイトがあることを気にしないので、同じ言語で複数のWebサイトを持つことに問題はありません(以下の解決策では問題になります)。

そのため、Add Store Code to Urls[ 構成]> [ウェブ]> [URL]> [ストアコードをURLに追加 ]からオプションを有効にすると、問題なく動作します。しかし今、私はデフォルト言語(英語)のURLを複製しました:

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のサブフォルダーを回避しますか?

回答:


7

私は以下の解決策を使用することになりました。多言語のMagento Webサイトの一般的な構成であることがわかりました。

このソリューションは、「通常の」URL(langサブフォルダーのないURL)からデフォルトのlangサブフォルダーのあるURLへのリダイレクトをデフォルトの言語に提供します。

たとえばit、がデフォルトの言語の場合、次のようになります。

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

1)言語コードでストアビューを作成する

  • [ストア]> [すべてのストア]に移動します。
  • 言語ごとにストアビューを作成します。
  • [ コード]フィールドに言語コードを設定します。
  • 例:2つのストアビューがあります。コード"it"(デフォルトビュー)のItalianoとコードenのEnglishです。

2)[ 店舗コードをURLに追加 ]オプションを有効にします

  • 店舗>設定>ウェブ>のUrlオプション> [はい]> [URLへのストアのコードを追加します
  • このオプションを有効にすると、次のようになります。

    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

始まるURLはen/adminsoap/rest/リダイレクトされません。

これをカスタマイズして、デフォルトの言語サブフォルダーを変更し、無視する他のURL(使用している言語コードごとに少なくとも1つ)を追加できます。

4)ルートをデフォルトの言語サブディレクトリにリダイレクトします

.htaccessこれらの行の検索では:

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

    Options +FollowSymLinks
    RewriteEngine on

次に、直後次の行を配置します。

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

    RedirectMatch 301 ^/$ /it/

欠点

私はこのソリューションを使用しましたが、うまくいきました。私が経験した唯一の欠点は、.htaccessMagentoを更新するたびにが書き換えられるため、更新後に復元する必要があることです。

別の欠点は、この回答へのコメントで指摘されているように、複数のWebサイト構成と同じ言語の複数のWebサイトがある場合です:https : //magento.stackexchange.com/a/197/38275


0

質問があります。1人の管理者(Magento 2)の下に2つのURLがあるとします:1)www.abc.cz-チェコ語バージョンのみ実行2)www.cde.com-現在ENバージョンを実行

たとえば.com / de、.com / esなどの.comの下にストアビューを追加したいのですが、.comの直下で実行されるEN言語用の「フォルダーシステム」は必要ありません。

私が誰かから正しく理解している場合、.comのフォルダーシステムの使用を開始すると、.czバージョンが影響を受け、.cz / czフォルダーが作成されます。

どうやってするか。ご協力ありがとうございました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.