Каждый раз, когда я переключаюсь с обзора магазина Engli sh на итальянский и наоборот, он выводит меня на эквивалентную домашнюю страницу (неважно, где я нахожусь) и выдает эту ошибку:
Вот мои настройки:
- Magento 2.3.4 (fre sh установка, самостоятельное размещение)
- 1 веб-сайт, 1 магазин, 2 магазина
- Для каждого магазина один домен (Engli sh магазин -> example.com, итальянский магазин -> example.it)
Я добавил поверх основного .htaccess эти 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
Резюме: Если, например, я на примере. com / my-beautiful-product. html [ Engli sh представление магазина ], и я переключаюсь на представление итальянского магазина, оно приводит меня к example.it и показывает эту ошибку («Запрошенный магазин не найден. Проверьте магазин и попробуйте снова.») Вместо того, чтобы взять меня на example.it / my-beautiful-product. html без ошибок. * 10 33 *
Есть идеи?
Что я тестировал:
Я пытался жестко закодировать коды представлений магазина в / vendor / magento / module-store / Controller / Store / SwitchAction. php в строке 106 и $ requiredUrlToRedirect:
...
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/
Затем я переключился с итальянского магазина на Engli sh один и он работал! Так что кажется, что он не может получить правильные значения $ targetStoreCode и $ requiredUrlToRedirect . Есть идеи?