サブフォルダー内のさまざまなストアビューまたは Web サイト
-
16-10-2019 - |
質問
クライアントは、多店舗展開するショップを次のように設定したいと考えています。
- 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
- ...
これは一例ですが、さらに多くの異なるサブフォルダーが存在する可能性があります。さまざまなストアビュー/Webサイトのさまざまなサブフォルダーを処理するための最良のアプローチは何ですか?
解決策の 1 つは、 de
, en
等そして、index.php と .htaccess を対応するサブフォルダーにコピーします。
ファイルの重複を最小限に抑えるための回避策 (index.php のシンボリックリンク、.htaccess を使用する代わりの vHost 構成) もあるかもしれませんが、ファイル システムに変更を加える必要がなく、単に変更する必要がない解決策を見つけたいと思っています。設定によってすべてを処理します。
アップデート
エンタープライズ サポートにより、これを行うための最良の方法はサブフォルダーを作成することであることが確認されました。
最終的には次のようになりました。
- 「 languagefolders 」ディレクトリを作成します
- 調整された .htaccess および Magento フォルダー (app/、errors/、...) へのシンボリックリンクとともに、index.php のコピーをディレクトリ内に作成しました。
- シンボリックリンク「de」、「en」などを作成しました。「 languagefolders 」ディレクトリを指す Magento ルート ディレクトリ内
このようにして、新しいシンボリックリンク (例:"fr")。
解決
URL に基づいて複数のドメイン/パスを提供するのは非常に簡単です。述べたように、 ユニークな場合、最も簡単なセットアップ (構成のみ) が可能です。 core/store
コードはパス内でサブフォルダーとして使用できます. 。これには、次のいずれかが必要です。
- 訪問者は最初は正しいサブフォルダー パスにリンクされます
- 訪問者にはランディング ページが提供され、そこからストアを選択して Cookie を受け取ります。
- PHP が応答を処理する前に、実行タイプを設定してコードを実行するために、何らかのメカニズムが使用されます。
#3について:1.4 Magento 以降、Web サーバーが実行コンテキストを決定できるようになりました (Webサイト または 店) および使用する必要がある特定のコード。から インデックス.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 が起動する前にシステムに影響を与える可能性があります。アパッチと 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の回答. 。最初の 2 行の結果は次のようになります。 $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';
一方、後の 2 行は必要な情報を提供します $_SERVER["MAGE_RUN_CODE"] = 'deutsch';
. 。他にもたくさんのトリックがありますが、上記のトリックは以前に私を噛んだことがあります。
最終目標は、合理的な限り (地理 IP と多言語への配慮) 初期検出を行うと同時に、後続のリクエストでロジックをバイパス/ステップスルーするために使用できるストア Cookie をユーザーに設定させることです。
他のヒント
インデントされたURL(サブフォルダー)がストアコードと同じ名前を持つことができる場合(なぜですか?)、単に有効にすることができます Configuration > Web > Url options > Add Store Code to Urls
.
私たちはまさにそれをすることになりました
エンタープライズサポートで、これを行う最善の方法はサブフォルダーを作成することであることを確認しました。
私たちはこのようにそれをすることになりました:
- 「LanguageFolders」ディレクトリを作成します
- ディレクトリ内にindex.phpのコピーを作成し、調整された.htaccessとMagentoフォルダーへのシンリンク(app/、errors/、...)を作成しました。
- 「LanguageFolders」ディレクトリを指すMagentoルートディレクトリ内の「DE」、「EN」などを作成しました
このようにして、新しいSymlink(「FR」など)を作成することで、新しい言語を追加できます。
バックエンドでは、ストアを設定します base url
に domain.com/en
nginxを使用する場合、新しいサブフォルダーでもindex.phpを処理するためにロケーション処理に更新が必要です。これは、新しい翻訳フォルダーごとに行う必要があります
あります Magentoの公式ナレッジベースへのエントリー それはまさにそれを説明しています。
Apacheを使用している場合は、すべての仮想ホストエントリ(各ドメイン)が、Magentoのインストールがあるのと同じドキュメントルートを指していることを確認してください。それは複数のドメイン用です。
次の(そして最後の)ことはです .htaccess 同じMagentoインストールフォルダー。 .htaccessは、各サーバーリクエストごとにルールアクションを設定できる強力なディレクトリレベルの構成ファイルです。そのため、そこにあるすべての異なる(サブ)ドメイン/フォルダーアクションを処理し、Magentoが初期化段階で使用する正しいサーバー変数を設定する必要があります。
サーバー構成が完了したら、Magento Admin(System -Configuration -General -Web)の各ストアの異なるベースパスを設定する必要があります。
したがって、公式ガイド(これも好ましい方法である)に従って、物事がスムーズに機能することを確認してください。
まず、Magento Adminパネルで構成を行い、次にサブディレクトリを作成し、index.phpと.htaccessをサブディレクトリに移動し、index.phpにいくつかの小さな変更を加える必要があります。
ここ これを行う方法の完全な例です。