サブフォルダー内の異なるストアビューまたはWebサイト


29

クライアントは、マルチストアショップを次のように設定したいと考えています。

これは一例ですが、さらに多くの異なるサブフォルダーが存在する場合があります。さまざまなストアビュー/ Webサイトのさまざまなサブフォルダーを処理する最良の方法は何ですか?

解決策の1つはdeenなどと呼ばれるサブフォルダーを作成し、index.phpと.htaccessを対応するサブフォルダーにコピーすることです。

ファイルの重複を最小限に抑えるための回避策(index.phpのシンボリックリンク、.htaccessを使用する代わりにvHost設定)もありますが、ファイルシステムに変更を加える必要はありませんが、単に解決策を見つけたいです構成ごとにすべてを処理します。


更新

これを行う最善の方法はサブフォルダーを作成することであることをエンタープライズサポートに確認しました。

最終的には次のようになりました。

  • 「languagefolders」ディレクトリを作成します
  • ディレクトリ内にindex.phpのコピーを作成し、調整された.htaccessとMagentoフォルダーへのシンボリックリンク(app /、errors /、...)
  • 「languagefolders」ディレクトリを指すMagentoルートディレクトリ内に「de」、「en」などのシンボリックリンクを作成しました。

この方法では、新しいシンボリックリンク(たとえば「fr」)を作成することにより、新しい言語を追加できます。


これは、Webサイトが製品またはカテゴリーを見つけられないことを見つけるためだけに行いました(Magento 404 /ページへのルートなし)。これにも遭遇しましたか?
-snh_nl

覚えている限りではありませんが、ごめんなさい。すべてのインデックスを再作成しましたか?
マティアスツァイス

nginxを使用し、confを機能させるには更新が必要です。コメントを更新します
snh_nl

2つの奇妙なこと。1)/ checkoutは404を返し、2)言語選択ツール:英語をクリックしてから再び英語をクリックすると、uriが/ en / en / en / etcを追加し続けることがわかります....ベースURLとして何を選択しましたか?domain.com/enまたはdidiをdomain.comとして保持
-snh_nl

domain.com/en/を選択しました。
マティアスツァイス

回答:


18

URLに基​​づいて複数のドメイン/パスを提供するのは非常に簡単です。前述のように、一意のcore/storeコードをサブフォルダーとしてパスで使用できる場合、最も簡単なセットアップ(構成のみ)が可能です。これには、次のいずれかが必要です。

  1. 訪問者は最初に正しいサブフォルダーパスにリンクされます
  2. 訪問者にはランディングページが提供され、そこからストアを選択してCookieを受け取ります
  3. 何らかのメカニズムを使用して、実行タイプを設定し、PHPが応答を処理する前にコードを実行します。

#3に関して:1.4 Magento以降、Webサーバーが実行中のコンテキスト(websiteまたはstore)および使用する特定のコードを決定できるようにしました。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]

この優れたSO回答で示されているように、Apacheは環境変数とサブフォルダーを使用しています。最初の2行は結果に$_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';なりますが、後者の2行は必要なものを提供します$_SERVER["MAGE_RUN_CODE"] = 'deutsch';。他にも多くのトリックがありますが、上記は以前に私を噛みました。

最終目標は、ユーザーにストアCookieを設定させ、後続のリクエストでロジックをバイパス/ステップ実行するために、合理的な範囲(geoip +多言語の懸念)で初期検出を行うことです。


1
ありがとう、ベン。この方法で、ストアビューを初期化できますが、Magento 404ページは常に表示されます( "Whoops、our bad")。私はにベースURLを設定しdomain1.org/endomain.org/deなど。スキンURL、メディアURLなどはdomain.org/(skin | media | ...)に設定されます。通常の「copy index.php and .htaccess」アプローチを使用すると、正しいページが返されることに注意してください。
マティアスツァイス

私たちが達成しようとしたものに最も近いので、私はこの答えを受け入れました(特別な要件のために少し違った解決をした場合でも)。
マティアスツァイス

「ストアコードをURLに追加」設定が機能しなかったことに本当に驚きました。
ベンマーク

店舗コードは一意である必要があります。すべてがde /、fr /、またはen /で終わる複数のストアビューでどのように機能しますか?
マティアスツァイス

私はいくつかのWebサーバベース(例えば書き換えと仮定したと思いますけれども、私は、私が複製店舗コードを逃したと思うmode_rewriteに基づく)HTTP_HOST+サブフォルダレベル1を
benmarks

9

インデントされたURL(サブフォルダー)が店舗コードと同じ名前を持つことができる場合(なぜですか?)、単に有効にすることができConfiguration > Web > Url options > Add Store Code to Urlsます。


正しい場合は、サブフォルダーも必要ありません。URL書き換えが有効になっている限り、Magentoは「en」がストアビューコードであり、サブフォルダーを検索しないことを認識します。
ポールグリゴルタ

8
この解決策の問題は、Magentoのインストールで、Magentoが「de」のストアコードを1つしか許可しないことです。したがって、同じ言語の複数のWebサイトがある場合は、異なるストアコード(de_de、de_enなど)を使用する必要があります
。– therouv

2
ルーベンはそれを得た。問題は、同じ店舗コードで複数の店舗を持つことはできないということです。
アンナフォルクル

はい、問題は、ルーベンが言ったように、同じ店舗コードを使用して2つの店舗ビューを作成できないことです。
マティアスツァイス

ルーヴェンが正しいことを確認します。バグがMagentoに報告されました。より多くのマルチストアを備えたこれらの現代の環境では、これは機能するはずです。ただし、設定Add store codes to urlをストアビュー設定にすることは可能だと思いますか?magento.stackexchange.com/questions/60686/…= sepドメインのマルチストアが1つあり、他は/ enおよび/ frを使用すると仮定します
snh_nl

3

まさにそれをやった

これを行う最善の方法はサブフォルダーを作成することであることをエンタープライズサポートに確認しました。

最終的には次のようになりました。

  • 「languagefolders」ディレクトリを作成します
  • ディレクトリ内にindex.phpのコピーを作成し、調整された.htaccessとMagentoフォルダーへのシンボリックリンク(app /、errors /、...)
  • 「languagefolders」ディレクトリを指すMagentoルートディレクトリ内に「de」、「en」などのシンボリックリンクを作成しました。

この方法では、新しいシンボリックリンク(たとえば「fr」)を作成することにより、新しい言語を追加できます。

バックエンドでは、ストアbase urldomain.com/en

nginxを使用する場合、新しいサブフォルダーでもindex.phpを処理するために、ロケーション処理の更新が必要です。これは、新しい翻訳フォルダーごとに行う必要があります


snh_nl最後の2行が何を意味するのかを説明する機会はありますか?前に言ったのと同じ問題がありますが、理解できません。nginxを使用する場合、新しいサブフォルダーでもindex.phpを処理するためにロケーション処理を更新する必要があります。これは、新しい翻訳フォルダーごとに行う必要があります。私はnginxを使用していますが、同じことをしようとしています。ありがとう
-vbak

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

2

Magentoの公式ナレッジベースには、まさにそれを説明するエントリがあります。

Apacheを使用している場合は、(各ドメインの)すべての仮想ホストエントリが、Magentoインストールが存在する同じドキュメントルートを指していることを確認してください。これは複数のドメイン用です。

次の(そして最後の)ものは、同じMagentoインストールフォルダー内の.htaccessです。.htaccessは、サーバー要求ごとにルールアクションを設定できる強力なディレクトリレベルの構成ファイルです。そのため、すべての異なる(サブ)ドメイン/フォルダーアクションを処理し、Magentoが初期化段階で使用する正しいサーバー変数を設定する必要があります。

サーバーの設定が完了したら、Magento admin(システム-設定-一般-ウェブ)の各ストアに異なるベースパスを設定する必要があります。

そのため、公式ガイド(推奨される方法でもあります)に従うようにしてください。そうすれば、物事はスムーズに機能するはずです。


1
問題は複数のドメインに関するものではありませんでした。
ファビアンシュメングラー

質問は、複数ドメインでのマルチストア設定に関するものでした(.orgと.chは異なるドメインです)。ただし、重要なことではありません。提供された回答は、ストアごとに複数のドメイン、サブドメイン、または異なるサブフォルダーがあるかどうかに関係なく、マルチストアセットアップのソリューションを説明しているためです。
Jernej Golja

1
しかし、焦点はストアビューのパスにあり、ドメインに問題があるとは思えませんでした。とにかく、編集後に投票を変更しました。
ファビアンシュメングラー

1
正確には、問題は複数のドメインを使用する必要があるということではなく、複数のストアが同じパス/「サブフォルダ」を共有する必要があることです。これはストアコードをURLに追加することでは不可能です。
マティアスツァイス

-2

まず、Magento管理パネルで設定を行い、次にサブディレクトリを作成し、index.phpと.htaccessをサブディレクトリに移動して、index.phpに若干の変更を加える必要があります。

ここでこれを行う方法の完全な例です。

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