Я пытаюсь несколько часов, чтобы получить другой магазин для отображения на основе подкаталога. Наш веб-сайт, созданный для Magento, предназначен для магазинов остального мира, США, Великобритании и Австралии с различными различиями между ними. У нас были эти работы, задав переменные окружения в .htaccess (я буду использовать базовое и австралийское хранилище только для краткости), которые затем используются в файле index.php для загрузки правильного хранилища.
SetEnvIf Host staging\.hostname\.com MAGE_RUN_CODE=base SetEnvIf Host staging\.hostname\.com MAGE_RUN_TYPE=store SetEnvIf Host staging-au\.hostname\.com MAGE_RUN_CODE=au SetEnvIf Host staging-au\.hostname\.com MAGE_RUN_TYPE=website
Теперь мне было поручено изменить это, чтобы использовать подкаталоги, поэтому staging.hostname.com/au/, и все, что я вставляю, не работает.
Я изменил базовый url для разных магазинов в конфигурации, чтобы указать на staging.hostname.com/au/ для австралийского магазина. Из того, что я вижу, это не поднимает мои новые .htaccess линии
SetEnvIf Request_URI "^/au/.*" MAGE_RUN_CODE=au SetEnvIf Request_URI "^/au/.*" MAGE_RUN_TYPE=website
Я пробовал регулярное выражение с кавычками и без них, а с и без шаблона ничего (. *) И без радости.
Я также убедился в том, что вы удаляете / комментируете строки узла SetEnvIf, так как иначе это, вероятно, вызовет проблемы, так как я дважды установил переменную окружения.
Если я оставлю старый url, указывающий на магазин (staging-au.hostname.com), Magento перенаправляет на базовый URL-адрес магазина staging.hostname.com/au (так что это означает, что работает старая информация .htaccess), но затем по умолчанию возвращается к значениям базового хранилища и дает мне ошибку 404.
Любая помощь будет принята с благодарностью.
Apache версии 2.2.21, если это поможет.
Это будет зависеть от того, как вы настроили США, Великобританию и т. Д. Предполагая, что они настроены как магазины, вы должны просто включить Систему> Конфигурация> Веб> Параметры URL> Добавить код магазина в URL-адреса, и вам не нужно путаться с вашим request_uri через .htaccess.
На некоторых серверах директива SetEnvIf не распознается в файле .htaccess.
Переменные среды также немного забавны при работе с переадресацией в .htaccess, особенно когда вы перенаправляете файлы .htaccess, которые запускаются в подкаталогах.
Apache фактически переименует переменную окружения, добавив перед ней «REDIRECT_».
Чтобы заставить его работать так, как вы хотите, удалите директивы SetEnvIf и добавьте следующее ниже «#RewriteBase / magento /» в корневой файл .htaccess от Magento:
RewriteCond %{REQUEST_URI} ^/au/.* [NC,OR] RewriteCond %{REQUEST_URI} ^/au$ [NC] RewriteRule .* - [E=MAGE_RUN_CODE:au] RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+) RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:website]
Или вы можете просто не беспокоиться о наличии явных кодов магазинов вообще. Если вы используете GEOIP для получения кода страны двух букв в вашем index.php, вы можете создать простую конструкцию switch / case / if, чтобы установить переменную кода магазина или код сайта, а затем вызвать основную программу. Если вы это сделаете, вам не нужно будет хранить коды в URL-адресе.
$country=$_SERVER['GEOIP_COUNTRY_CODE']; //if (isset($_COOKIE['geocountry'])) $country=$_COOKIE['geocountry']; switch ($country) { case "CA": case "MX": case "US": $_SERVER['MAGE_RUN_CODE'] = "usd"; $_SERVER['MAGE_RUN_TYPE'] = "website"; break; case "AT": case "BE": case "CY": case "DE": case "ES": case "FI": case "FR": case "GR": case "IE": case "IT": case "LU": case "MT": case "NL": case "SI": $_SERVER['MAGE_RUN_CODE'] = "eur"; $_SERVER['MAGE_RUN_TYPE'] = "website"; break; case "BG": case "CZ": case "DK": case "EE": case "HU": case "LV": case "PL": case "RO": case "SE": $_SERVER['MAGE_RUN_CODE'] = "eugbp"; $_SERVER['MAGE_RUN_TYPE'] = "store"; break; case "GB": $_SERVER['MAGE_RUN_CODE'] = "gbp"; $_SERVER['MAGE_RUN_TYPE'] = "website"; break; case "AX": $_SERVER['MAGE_RUN_CODE'] = "staging"; $_SERVER['MAGE_RUN_TYPE'] = "store"; break; default: $_SERVER['MAGE_RUN_CODE'] = "row"; $_SERVER['MAGE_RUN_TYPE'] = "store"; }
Обратите внимание, что вам понадобится адрес cookie / ip или другой механизм для чрезмерного использования geo-ip для целей тестирования. Вам не понадобятся разные URL-адреса для разных магазинов или любых других подкаталогов. Вы по-прежнему сможете создавать темы для каждого магазина по-разному и иметь разные валюты на уровне веб-сайта.