nginx 上のシンボリックリンクされたサブディレクトリとして多言語ストアが「ページへのルートがありません」を返す
-
12-12-2019 - |
質問
を使用して多言語ストアをセットアップする必要がありました。 subdirectory/symlink
説明された方法 ここ. 。(その理由は@下部をお読みください)
どうやってやったのか。 Index.php をサブディレクトリにコピーし、すべてのフォルダーにシンボリックリンクを作成しました。の base url
に設定されました domain.com/en
問題/質問ここで、domain.com/en を開くと Web サイトが表示され、英語版が表示されます。唯一の問題は、すべてのカテゴリと製品のリンクで「ページへのルートがありません」エラーが発生することです。カテゴリや製品を表示する代わりに。さて、どうしてこんなことがあり得るでしょうか?
例それで https://domain.com/en/funkyshoes
カテゴリ funkyshoes は開きませんし、funkyshoes も開きません https://domain.com/funkyshoes
そのことについては。https://domain.com/en/funkyshoes
戻り値 => no route to page
https://domain.com/funkyshoes
戻り値 => https://domain.com/en
なぜだめですか?複数のマルチストアがあり、すべてのストアに en/de/fr のような lang store_code を与えることはできません。また、ストアごとに異なるドメインを持つマルチストアが 1 つあり、もう 1 つはメイン ドメインからの /en、/de、/fr メソッドを使用しているためです。 。
解決 2
さらに優れた解決策は次のとおりです。
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite /(../)? /$1index.php?$args;
}
カタログ|チェックアウト|顧客に対して特別な場所のルールがあったからです。問題は、すべてが @rewrite を参照していることです。この方法では、/en とその後の /fr および /de に個別に一致するように設定されているすべての位置コマンドを書き直す必要がありました。
そこで、最初に / をテストし、次に / (2 文字のコード) をテストする最も単純なフォールバック リライトを思いつきました。そしてそれに基づいて書き直す
うまくいくようです
さらに、store_code ルックアップを変更する必要があります。/en のため、http_host 変数またはサーバー変数は機能しなくなります。
考えられる解決策はここにあります。https://stackoverflow.com/questions/30078679/nginx-conf-w-multiple-maps-to-same-variable
他のヒント
これはNginxの問題です。
これをconfファイルに追加すると、問題が解決しました
location /en {
rewrite ^/en(.*)$ /en/index.php last;
}
.