问题
Everytime I'm switching from the English store view to the Italian's one and viceversa, it takes me to the equivalent homepage (no matters where I am) and it throws this error:
Here's my setup:
- Magento 2.3.4 (fresh installation, self hosted)
- 1 website, 1 store, 2 store views
- For each store view one different domain (English store view --> example.com, Italian store view --> example.it)
I added on top of main .htaccess these env:
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
Recap: If, for example, I'm on example.com/my-beautiful-product.html [English store view] and I'm switching to the Italian store view, it takes me to example.it and it shows that error ("The store that was requested wasn't found. Verify the store and try again.") instead of take me on example.it/my-beautiful-product.html without any errors.
Any Ideas?
What I tested:
I tried to hardcode the store view codes in /vendor/magento/module-store/Controller/Store/SwitchAction.php at row 106 and the $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); } ...
Here a switch url example: https://example.com/stores/store/redirect/___store/it/___from_store/en/uenc/aHR0cHM6Ly9kZXYudGVjbmljbWFuLml0Lz9fX19zdG9yZT1pdA%2C%2C/
Then I switched from Italian store view to the English one and it worked! So it seems it does not able to get the correct values of $targetStoreCode, and $requestedUrlToRedirect. Any ideas?
回答1:
You need to run following query in your database, and then try to open website.
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;
回答2:
It's a Magento 2.3.1 to 2.3.5 bug. The problem is in the view... and exactly in module-store/view/frontend/templates/switch/languages.phtml at the line 28.
WRONG
<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
<a href="<?= $block->escapeUrl($block->getViewModel()->getTargetStoreRedirectUrl($_lang)) ?>">
<?= $block->escapeHtml($_lang->getName()) ?>
</a>
</li>
CORRECT
<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
<a href="#" data-post='<?= /* @noEscape */ $block->getTargetStorePostData($_lang) ?>'>
<?= $block->escapeHtml($_lang->getName()) ?>
</a>
</li>
...and now it works like a charm!
来源:https://stackoverflow.com/questions/60971372/magento-2-the-store-that-was-requested-wasnt-found-verify-the-store-and-try