Intereting Posts
Многомерный массив php удаляет дубликаты Как использовать WSDL phpmailer: Ответить, используя только адрес «Ответить» PHP – регулярное выражение для проверки того, что <iframe> поступает с Google Maps Как я могу ограничить доступ к некоторым страницам PHP только со страниц моего сайта? как проверить размер загруженного изображения больше, чем 2 МБ в php? PHP: DomElement-> getAttribute Как я могу пометить шаблон для редактирования или добавить узел для определенного типа контента? Как отображать сообщение только на домашней странице joomla? PHP flock () не блокирует блокирование почему? Лучший способ шифрования информации о клиентах в базе данных MySQL моей компании? Проблема с шаблоном Faux Время загрузки php-страницы на сервере Apache как предотвратить эту ошибку: Предупреждение: mysql_fetch_assoc () ожидает, что параметр 1 будет ресурсом, boolean задан в … в строке 11 Результаты группы PHP по первой букве имени

Переадресация сайта Magento .htaccess

Я пытаюсь несколько часов, чтобы получить другой магазин для отображения на основе подкаталога. Наш веб-сайт, созданный для 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-адреса для разных магазинов или любых других подкаталогов. Вы по-прежнему сможете создавать темы для каждого магазина по-разному и иметь разные валюты на уровне веб-сайта.