2012-01-06 2 views
2

Я пытаюсь несколько часов, чтобы получить другой магазин для отображения на основе подкаталога. Наш веб-сайт, созданный для Magento, предназначен для магазинов остального мира, США, Великобритании и Австралии с различными различиями между ними. У нас были эти работы, задав переменные окружения в .htaccess (я буду использовать базовое и австралийское хранилище только для краткости), которые затем используются в файле index.php для загрузки правильного хранилища.Перемещение узла Magento .htaccess

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 Host, так как иначе это, вероятно, вызовет проблемы, так как я дважды установил переменную окружения.

Если я оставил старый url, указывающий на магазин (staging-au.hostname.com), Magento перенаправляет на базовый URL-адрес магазина staging.hostname.com/au (так что это означает, что работает старая информация .htaccess) , но затем по умолчанию возвращается к значениям базового хранилища и дает мне ошибку 404.

Любая помощь была бы принята с благодарностью.

Apache версия 2.2.21 если это поможет.

+0

сделать вашу жизнь проще: http://blog.speedupmate.com/post/9992573819/poor-mans-multisite-setup-for-magento –

ответ

2

Это будет зависеть от того, как вы настроили США, Великобританию и т. Д. Предполагая, что они настроены как магазины, вы должны просто включить Систему> Конфигурация> Веб> Параметры URL> Добавить код магазина в URL-адреса, а не вам нужно пообщаться с вашим request_uri через .htaccess.

+0

Если бы мы правильно, это множество вещей это то, что мы должны были сделать. Поскольку это было последним изменением ко всему, что уже произошло, было уже слишком поздно. И теперь мы пошли с использованием поддоменов :) – BenFreke

1

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

+0

Это в основном то, что уже делает расширение GeoIP. Но ваш ответ заставил меня понять, что я попал в белый список сайтов, на которые это не повлияло ... поэтому я думаю, что это была половина вопроса, который у меня был. Благодарю. – BenFreke

2

На некоторых серверах директива SetEnvIf не распознается в файле .htaccess.

Переменные среды также действуют немного смешно при работе с переадресацией в .htaccess, особенно когда вы перенаправляете файлы .htaccess, которые выполняются в подкаталогах.

Apache фактически переименует переменную окружения, добавив перед ней «REDIRECT_».

Чтобы заставить его работать так, как вы хотите, удалите директивы SetEnvIf и добавьте следующее ниже «#RewriteBase/magento /» в корень Magento.файл .htaccess:

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] 
Смежные вопросы