Magento Multistore Einrichtung mit verschiedenen URLs / Domains (Magento 1 und Magento 2)

BildWie 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.

BildIm 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.

Published by Covos

Seit 2009 arbeite ich nun intensiv mit Magento. Begonnen habe ich mit der Erstellung und dem Betrieb von B2C-Shops. Ausgeweitet wurde dies durch meine Tätigkeit im Logistik-Sektor. Hieraus entstanden erste spezialisierte B2E-Systeme. Heute arbeite ich tag-täglich mit spannenden B2C-, B2B- und B2E-Projekten und berichte in diesem Blog über Herausforderungen und gebe Insider-Tipps.

One comment on “Magento Multistore Einrichtung mit verschiedenen URLs / Domains (Magento 1 und Magento 2)”

Leave a Reply

Your email address will not be published. Required fields are marked *