1

ブラウザーの言語を検出し、ユーザーを対応するストア ビューにリダイレクトするように、magento index.php を構成しました。それはうまくいきます。しかし、ストアビューごとに固有の URL には問題があります。たとえば、次の URL の製品があります。

./product-url-in-english --> English view
./product-url-in-catalan --> Catalan view

ブラウザが英語で構成されていて、カタロニア語の URL にアクセスすると、404 エラーが発生しました。これは、その URL がカタロニア語のビュー専用であるためですが、ブラウザの言語を検出して英語のビューにリダイレクトしているため、カタロニア語の URL は機能しません。

パラメータ from_store と store を使用すると機能しますが、それを index.php ファイルに反映する方法がわかりません。ブラウザの言語を検出するコードは次のとおりです。

/* Language detection */
function getLanguageCode()
{
    $default_language_code = 'es';
    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        foreach (explode(",", strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE'])) as $accept) {
            if (preg_match("!([a-z-]+)(;q=([0-9.]+))?!", trim($accept), $found)) {
                $langs[] = $found[1];
                $quality[] = (isset($found[3]) ? (float) $found[3] : 1.0);
            }
        }
        // Order the codes by quality
        array_multisort($quality, SORT_NUMERIC, SORT_DESC, $langs);
        // get list of stores and use the store code for the key
        $stores = Mage::app()->getStores(false, true);
        // iterate through languages found in the accept-language header
        foreach ($langs as $lang) {
            $lang = substr($lang,0,2);
            if (isset($stores[$lang]) && $stores[$lang]->getIsActive()) 
                return $lang;
        }
    }
    return $default_language_code;
}


/* Store or website code */
if(isset($_SERVER['MAGE_RUN_CODE']))
    $mageRunCode = $_SERVER['MAGE_RUN_CODE'];
else
    $mageRunCode = getLanguageCode();

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

すべてのストア ビューからの URL を処理し、404 エラーを発生させずに特定のページにリダイレクトできるようにするには、index.php ファイルで何を変更する必要がありますか?

ありがとう

4

0 に答える 0