Magento сайт переключения .htaccess - PullRequest
2 голосов
/ 06 января 2012

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

Ответы [ 3 ]

3 голосов
/ 30 мая 2013

На некоторых серверах директива 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]
2 голосов
/ 06 января 2012

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

1 голос
/ 06 января 2012

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

...