Wie richtet man Magento 1.7 ein, damit man mit verschiedenen URLs bzw. Domains verschiedene Shops / Stores bzw. Websites erreichen kann?
Früher wurde dies über die index.php erreicht. Nun kann dies direkt über die .htaccess erreicht werden.
Im ersten Schritt merkt man sich die Codes der verschiedenen Websites. Anschließend wird dann die .htaccess geöffnet und ganz unten folgender Code für jede Website eingefügt:
SetEnvIf Host www\.Domain1\.de MAGE_RUN_CODE=base SetEnvIf Host www\.Domain1\.de MAGE_RUN_TYPE=website SetEnvIf Host ^Domain1\.de MAGE_RUN_CODE=base SetEnvIf Host ^Domain1\.de MAGE_RUN_TYPE=website
Die Zeile 1 und 2 gibt das “wenn – dann” an. Die Zeile 3 und 4 stehen für den Fall dass die Domain ohne www eingegeben ist.
Würde für Domain 2 der Website Code domain2 sein, käme dann noch
SetEnvIf Host www\.Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host www\.Domain2\.de MAGE_RUN_TYPE=website SetEnvIf Host ^Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host ^Domain2\.de MAGE_RUN_TYPE=website
Wenn mehrere URLs auf ein und dieselbe Website zeigen sollen, kann dies auch hinzugefügt werden z.B.
SetEnvIf Host www\.Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host www\.Domain2\.de MAGE_RUN_TYPE=website SetEnvIf Host ^Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host ^Domain2\.de MAGE_RUN_TYPE=website SetEnvIf Host www\.Domain3\.de MAGE_RUN_CODE=domain2 SetEnvIf Host www\.Domain3\.de MAGE_RUN_TYPE=website SetEnvIf Host ^Domain3\.de MAGE_RUN_CODE=domain2 SetEnvIf Host ^Domain3\.de MAGE_RUN_TYPE=website
Soll nur ein Store angesprochen werden, sähe der einzufügende Code so aus:
SetEnvIf Host www\.Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host www\.Domain2\.de MAGE_RUN_TYPE=store SetEnvIf Host ^Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host ^Domain2\.de MAGE_RUN_TYPE=store
Im Falle eines Storeviews dann so
SetEnvIf Host www\.Domain2\.de MAGE_RUN_CODE=domain2 SetEnvIf Host ^Domain2\.de MAGE_RUN_CODE=domain2
In bestimmten Fällen (bestimmte Serverkonfigurationen) kann es sein, dass dies alleine nicht ausreichend ist. Hier müsste man dann noch in der index.php eine kleine Änderung machen. Hier wird dann der Code
/* Store or website code */ $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : ''; /* Run store or run website */ $mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store'; Mage::run($mageRunCode, $mageRunType);
in
/* Store or website code */ $mageRunCode = isset($_SERVER['REDIRECT_MAGE_RUN_CODE']) ? $_SERVER['REDIRECT_MAGE_RUN_CODE'] : ''; /* Run store or run website */ $mageRunType = isset($_SERVER['REDIRECT_MAGE_RUN_TYPE']) ? $_SERVER['REDIRECT_MAGE_RUN_TYPE'] : 'store'; Mage::run($mageRunCode, $mageRunType);
geändert. Es wird dann ein Redirect beim Server angestoßen.
Weitere Beiträge mit Informationen zum Wechsel von Stores, Websites etc. gibt es in diesem und in diesem Eintrag.
UPDATE vom 06.09.2019
Nach einem Server-Update auf Ubuntu 18.04 funktionierten die Umleitungen auf die einzelnen Websites nicht mehr und man wurde immer zur Standard- / Mainwebsite geleitet. Es war nicht mehr möglich über die URLs die gewünschten Shops zu erreichen.
Um dies zu beheben, war es nötig die o.g. Änderung der index.php rückgängig zu machen und wieder den Original-Code
/* Store or website code */ $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : ''; /* Run store or run website */ $mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store'; Mage::run($mageRunCode, $mageRunType);
zu verwenden.
Genutzt in Magento Versionen 1.7-1.9 Fragen, Kommentare, Vorschläge? Gerne direkt oder als Kommentar.
Bei Magento 2.x wird dies ähnlich gemacht.
Grundsätzlich reicht es eigentlich nur die Einträge in der .htaccess zu machen (wie oben beschrieben). Sollte dies nicht reichen, kann auch mit der index.php (neuerdings im Ordner /pub/) gearbeitet werden. Bei mir klappte es in den meisten Fällen mit der .htaccess-Anpassung.
Ansonsten trägt man in der index.php folgende Zeilen ein (unter exit })
$params = $_SERVER; if( in_array($params["HTTP_HOST"], array("www.meinewunschdomain.de","meinewunschdomain.de")) ){ $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'codedesstoreviews'; $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store'; }else{ $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'codedesstandardstoreviews'; $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store'; }
“codedesstoreviews” ist hierbei der besondere Storeview, der vom Standard abweicht. Hat man als normale Base-URL z.B. immer eine .com-Domain und möchte nur für den deutschen Storeview die .de-Domain verwenden, würde dies z.B. so aussehen können wie oben.
Update vom 05.05.2021
Was in Magento 2.2 noch funktionierte, funktionierte in der nächsten Version schon nicht mehr. Hier wurde dann zu folgendem Code geraten:
$params = $_SERVER;
switch($_SERVER['HTTP_HOST']) {
case 'meinewunschdomain.de':
#case 'www.meinewunschdomain.de':
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'codedesstoreviews';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store';
break;
case 'meinewunschdomain2.de':
#case 'www.meinewunschdomain2.de':
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'codedesstandardstoreviews';
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store';
break;
}
(es kann übrigens einfach anstelle von “store” das Wort “website” verwendet werden, wenn man den Code der jeweiligen Website verwenden möchte bzw. die Website aufrufen will.
Update vom 12.08.2021
Leider funktionierte dieser Code bei Magento 2.4.2 schon wieder nicht mehr und so kam -wie schon bei Magento 1- wieder die .htaccess ins Spiel. Eine Anpassung der index.php ist dann nicht mehr notwendig bzw. überflüssig.
SetEnvIf Host ^(.*)meinewunschdomain.de MAGE_RUN_CODE=codewebsite
SetEnvIf Host ^(.*)meinewunschdomain.de MAGE_RUN_TYPE=website
In diesem Fall habe ich mal den Code einer Website verwendet, da ich gerade diesen benötigte. Wenn man anstelle der o.g. Domain eine Subdomain verwenden will, einfach das ^durch die entsprechende Subdomain ersetzen.
Genutzt in vielen Magento Versionen. Fragen, Kommentare, Vorschläge? Gerne direkt oder als Kommentar.
Eine Lösung für etwas komplexere Anforderungen (http://www.domain1.tld/de, http://www.domain2.tld/en…) innerhalb einer Magento-Instanz gibt es hier: https://gist.github.com/arosenhagen/5256617