web-dev-qa-db-ja.com

Magento 2:「リクエストされた店舗が見つかりませんでした。ストアを確認して、もう一度お試しください。」

英語のストアビューからイタリア語のストアビューに切り替えるたびに、同等のホームページが表示され(どこにいてもかまいません)、次のエラーがスローされます。

The store that was requested wasn't found. Verify the store and try again.

これが私の設定です:

  • Magento 2.3.4(新規インストール、セルフホスト)
  • 1つのウェブサイト、1つの店舗、2つの店舗ビュー
  • ストアビューごとに1つの異なるドメイン(英語のストアビュー-> example.com、イタリア語のストアビュー-> example.it)
  • 私はこれらの環境をメインの.htaccessに加えました:

    SetEnvIf Host ^(.*)\.example\.com MAGE_RUN_CODE=en
    SetEnvIf Host ^(.*)\.example\.com MAGE_RUN_TYPE=store
    SetEnvIf Host ^(.*)\.example\.it MAGE_RUN_CODE=it
    SetEnvIf Host ^(.*)\.example\.it MAGE_RUN_TYPE=store
    

まとめ:たとえば、example.com/my-beautiful-product.html[English store view]そして、イタリアのストアビューに切り替えると、の例が表示されます.itと表示され、の例ではなく、エラー(「要求されたストアが見つかりませんでした。ストアを確認して、再試行してください。」) .it/my-beautiful-product.htmlエラーなし。

何か案は?


私がテストしたもの:

  • / vendor/magento/module-store/Controller/Store/SwitchAction.phpの行106と$ requestedUrlToRedirectにストアビューコードをハードコード化しようとしました:

    ...
    public function execute()
    {
        $targetStoreCode = $this->_request->getParam(
            \Magento\Store\Model\StoreManagerInterface::PARAM_NAME
        );
        $fromStoreCode = $this->_request->getParam(
            '___from_store',
            $this->storeCookieManager->getStoreCodeFromCookie()
        );
    
        $requestedUrlToRedirect = 'https://example.it/my-beautiful-product.html';
        $redirectUrl = $requestedUrlToRedirect;
        // $requestedUrlToRedirect = $this->_redirect->getRedirectUrl();
        // $redirectUrl = $requestedUrlToRedirect;
    
        $error = null;
        try {
            $fromStore = $this->storeRepository->get('en');
            $targetStore = $this->storeRepository->getActiveStoreByCode('it');
            // $fromStore = $this->storeRepository->get($fromStoreCode);
            // $targetStore = $this->storeRepository->getActiveStoreByCode($targetStoreCode);
        } catch (StoreIsInactiveException $e) {
            $error = __('Requested store is inactive');
        } catch (NoSuchEntityException $e) {
            $error = __("The store that was requested wasn't found. Verify the store and try again.");
        }
        if ($error !== null) {
            $this->messageManager->addErrorMessage($error);
        } else {
            $redirectUrl = $this->storeSwitcher->switch($fromStore, $targetStore, $requestedUrlToRedirect);
        }
    
        $this->getResponse()->setRedirect($redirectUrl);
    }
    ...
    

    ここにスイッチURLの例: https://example.com/stores/store/redirect/___store/it/___from_store/en/uenc/aHR0cHM6Ly9kZXYudGVjbmljbWFuLml0Lz9fX19zdG9yZT1pdA%2C%2C/

次に、イタリアのストアビューから英語のビューに切り替え、うまくいきました!だからできないようです$ targetStoreCodeと$ requestedUrlToRedirectの正しい値を取得します。何か案は?

1
KaMZaTa

これはMagento 2.3.1から2.3.5のバグです。問題はビューにあります...そして、28行目のmodule-store/view/frontend/templates/switch/languages.phtmlに正確にあります。

違う

<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
    <a href="<?= $block->escapeUrl($block->getViewModel()->getTargetStoreRedirectUrl($_lang)) ?>">
        <?= $block->escapeHtml($_lang->getName()) ?>
    </a>
</li>

正しい

<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
    <a href="#" data-post='<?= /* @noEscape */ $block->getTargetStorePostData($_lang) ?>'>
        <?= $block->escapeHtml($_lang->getName()) ?>
    </a>
</li>

...そして今、それは魅力のように機能します!

0
KaMZaTa

テーブル「フラグ」からすべてのデータをクリアしてみてください。

0

データベースで次のクエリを実行してから、ウェブサイトを開こうとする必要があります。

SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE 
customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;
0
Hackathon360