Multi-Domain Nutzung einer CMSms Installation mittels .htaccess
Posted: Wed Apr 15, 2009 4:37 pm
Hier mein Ansatz, eine CMSms Installation mit mehreren Domains zu nutzen. Änderungen dafür sind nur in der config.php und der .htaccess nötig und natürlich evtl bei der Seitenstruktur. Ich erkläre das jetzt einmal an einem Beispiel mit 3 Domains (domain-1.de, domain-2.de, domain-3.de).
Als erstes muss die config.php bearbeitet werden, da in der Standard-Version die URL (und somit die Domain) fest eingetragen sind. Ich empfehle Euch die letzte Version meiner verbesserten config.php, siehe meinen Thread zu einer verbesserten config.php. Ich habe die aktuelle Version inklusive der nötigen Änderungen aber auch an diesen Thread angehängt (nach dem Download die Endung .txt entfernen und DB-Einstellungen anpassen).
Wie auch immer - in der config.php müssen folgende Einstellungen stimmen.
1.) mod_rewrite muss eingeschaltet sein, um URL Umleitungen zu ermöglichen:
2.) Die Hierarchie muss eingeschaltet sein, um die angeforderte Hauptseite zu erkennen:
3.) Die Page-Extension sollte auf '/' stehen:
4.) Die Root-URL muss automatisch erkannt werden:
(In der von mir verbesserten config.php wird dies anders gelöst, um auch spezielle Einstellungen zu ermöglichen.)
Als nächstes legen wir die Seitenstruktur an, sofern noch nicht geschehen. Für den Aufbau der später folgenden .htaccess gehe ich jetzt von folgender Seitenstruktur aus. Bei Anpassungen (speziell die Aliase der Domain-Seiten und der ersten Unterseite einer Domain) muss darauf geachtet werden, dass auch die .htaccess entsprechend angepasst wird.
Also nehmen wir folgende Seiten-Struktur an:
|
|--> domain-1.de (Alias seite1)
| |--> Unterseite 1 (Alias unterseite1)
| `--> Unterseite 2 (Alias unterseite2)
|
|--> domain-2.de (Alias seite2)
| |--> Unterseite 3 (Alias unterseite3)
| `--> Unterseite 4 (Alias unterseite4)
|
`--> domain-3.de (Alias seite3)
|--> Unterseite 5 (Alias unterseite5)
`--> Unterseite 6 (Alias unterseite6)
Wichtig sind hier (wie gesagt) die Aliase, da diese für die Domain-Umleitungen in der .htaccess relevant sind.
Jetzt muss noch die .htaccess angelegt (oder verändert) werden. Ich habe eine Beispiel-Datei erstellt und an diesen Artikel angehängt (nach dem Download in .htaccess umbenennen und im CMSms-Installationsverzeichnis ablegen).
Hier auszugsweise die grundlegenden Einstellungen der .htaccess erklärt.
1.) Zunächst muss die RewriteEngine eingeschaltet werden:
2.) Bei den meisten Providern ist Aufrufe einer Domain mit dem Prefix www und ohne zulässig. Einfacher (und besser für späteres Link-Building) ist es, den Anfragen ohne www dieses einzufügen, also aus domain.de www.domain.de zu machen. Das geht mit folgender Regel:
3.) Um fehlerhafte Anfragen auszuschließen, gehen wir sicher, dass der angefragte URL einen Punkt enthält (also eine Domain beinhaltet) und mit einem / abschließt:
4.) Jetzt kommt der eigentliche Trick. CMSms erkennt eine angefragte Seite anhand des entsprechenden Seiten-Alias. Nun haben wir ja für domain-1.de eine Seite mit dem Alias seite1 erstellt, für domain-2.de seite2, usw. Also leiten wir bei einer Anfrage von domain-1.de auf die Seite mit dem Alias seite1 weiter, bei einer Anfrage von domain-2.de auf seite2 usw. Das geht mit folgender Regel (hier nur auszugsweise für domain-1.de):
5.) Angenommen, der Seiten-Alias seite1 wird zusammen mit domain2.de aufgerufen (also http://www.domain-2.de/seite1/), dann wäre es ja schön, wenn im Browser auch die passende domain-1.de angezeigt wird (also eine Umleitung auf http://www.domain-1.de/seite1/). Das geht so (wieder nur auszugsweise für domain-1.de):
6.) Damit man auch für jede Domain eine seperate Menü-Struktur hat, zeigen wir im Seiten-Template das Menü erst ab der Ebene mit den Unterseiten an. Dadurch erscheint es sinnvoll, jeweils die erste Unterseite einer Domain zur Eingangsseite der Domain zu machen. Also leiten wir nochmal http://www.domain-1.de/seite1/ auf http://www.domain-1.de/seite1/unterseite1/ um (wieder nur auszugsweise für domain-1.de):
7.) Die folgende Regel sollte in jeder .htaccess für Pretty URL Unterstützung vorhanden sein. Sie macht aus einer Anfrage von http://www.domain-1.de/index.php?page=seite1 eine sprechende URL wie http://www.domain-1.de/seite1:
So, die Domains und Seiten-Aliase müsst Ihr natürlich durch Eure eigenen ersetzen. Ansonsten ist dies wie gesagt ein Ansatz, der bestimmt noch Verbesserungspotential hat. Aber es funktioniert erst einmal.
Nun noch ein Hinweis zur Einbindung der Menüs. Ich hatte es ja bereits angesprochen, es ist sicherlich in den meisten Fällen gewollt, dass zu jeder Domain eine seperate Menüstruktur existiert. Die Vorbereitungen dafür haben wir ja bereits getroffen. Am besten, Ihr legt nun für jede Domain ein seperates Template an. Das hat den Vorteil, dass Ihr auch andere Template-Stücke Domain-bezogen ändern könnt. Dann könnt Ihr das Menü in jedes Template einbinden und die gewünschte Ebene angeben. Hier beispielhaft die Platzhalter für die Einbindung der Menüs passend zur obigen Seitenstruktur.
Platzhalter für Template von domain-1.de:
Platzhalter für Template von domain-2.de:
Platzhalter für Template von domain-3.de:
Wichtig hier ist (wie Ihr seht) der Parameter "start_element", welcher angibt, ab welchem Menüpunkt das Menü angezeigt werden soll. Die Parameter "template" und "number_of_levels" müssen entsprechend angepasst werden, hier werden also Unterseiten bis zur 5.Menüebene angezeigt mit dem Menü-Template namens "menuetemplate".
So, das wars dann auch schon. Das ganze ist bei mir bereits auf einer Live-Seite im Einsatz:
http://www.mercurewalsrode.de/
Es funktioniert bisher ohne Probleme.
Ein etwas anderen Ansatz wurde im englischsprachigen Forum diskutiert:
http://forum.cmsmadesimple.org/index.php/topic,22890.0.html
Vielleicht muss ja auch mal jemand anderes eine Multi-Domain-CMSms Installation machen.
Als erstes muss die config.php bearbeitet werden, da in der Standard-Version die URL (und somit die Domain) fest eingetragen sind. Ich empfehle Euch die letzte Version meiner verbesserten config.php, siehe meinen Thread zu einer verbesserten config.php. Ich habe die aktuelle Version inklusive der nötigen Änderungen aber auch an diesen Thread angehängt (nach dem Download die Endung .txt entfernen und DB-Einstellungen anpassen).
Wie auch immer - in der config.php müssen folgende Einstellungen stimmen.
1.) mod_rewrite muss eingeschaltet sein, um URL Umleitungen zu ermöglichen:
Code: Select all
$config['assume_mod_rewrite'] = true;
Code: Select all
$config['use_hierarchy'] = true;
Code: Select all
$config['page_extension'] = '/';
Code: Select all
$config['root_url'] = 'http://'.$_SERVER['HTTP_HOST'];
Als nächstes legen wir die Seitenstruktur an, sofern noch nicht geschehen. Für den Aufbau der später folgenden .htaccess gehe ich jetzt von folgender Seitenstruktur aus. Bei Anpassungen (speziell die Aliase der Domain-Seiten und der ersten Unterseite einer Domain) muss darauf geachtet werden, dass auch die .htaccess entsprechend angepasst wird.
Also nehmen wir folgende Seiten-Struktur an:
|
|--> domain-1.de (Alias seite1)
| |--> Unterseite 1 (Alias unterseite1)
| `--> Unterseite 2 (Alias unterseite2)
|
|--> domain-2.de (Alias seite2)
| |--> Unterseite 3 (Alias unterseite3)
| `--> Unterseite 4 (Alias unterseite4)
|
`--> domain-3.de (Alias seite3)
|--> Unterseite 5 (Alias unterseite5)
`--> Unterseite 6 (Alias unterseite6)
Wichtig sind hier (wie gesagt) die Aliase, da diese für die Domain-Umleitungen in der .htaccess relevant sind.
Jetzt muss noch die .htaccess angelegt (oder verändert) werden. Ich habe eine Beispiel-Datei erstellt und an diesen Artikel angehängt (nach dem Download in .htaccess umbenennen und im CMSms-Installationsverzeichnis ablegen).
Hier auszugsweise die grundlegenden Einstellungen der .htaccess erklärt.
1.) Zunächst muss die RewriteEngine eingeschaltet werden:
Code: Select all
# mod_rewrite (sprechende URLs) einschalten
RewriteEngine On
RewriteBase /
Code: Select all
# Regel für Umleitung (301) von DOMAIN.DE nach www.DOMAIN.DE
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [NE,R=301,L,NC]
Code: Select all
# Regel für Umleitung (301) von Anfragen ohne . oder abschließenden /
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteRule ^(.*) %{REQUEST_URI}/ [NE,R=301,L]
Code: Select all
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{HTTP_HOST} ^www\.domain-1\.de
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI}seite1/ [NE,R=301,L,NC]
Code: Select all
RewriteCond %{REQUEST_URI} ^/seite1/
RewriteCond %{HTTP_HOST} !^www\.domain-1\.de
RewriteRule ^(.+)$ http://www.domain-1.de%{REQUEST_URI} [NE,R=301,L,NC]
Code: Select all
RewriteCond %{REQUEST_URI} ^/seite1/$
RewriteRule ^(.*) %{REQUEST_URI}unterseite1/ [NE,R=301,L]
Code: Select all
# Rewrite rules for pages
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
Nun noch ein Hinweis zur Einbindung der Menüs. Ich hatte es ja bereits angesprochen, es ist sicherlich in den meisten Fällen gewollt, dass zu jeder Domain eine seperate Menüstruktur existiert. Die Vorbereitungen dafür haben wir ja bereits getroffen. Am besten, Ihr legt nun für jede Domain ein seperates Template an. Das hat den Vorteil, dass Ihr auch andere Template-Stücke Domain-bezogen ändern könnt. Dann könnt Ihr das Menü in jedes Template einbinden und die gewünschte Ebene angeben. Hier beispielhaft die Platzhalter für die Einbindung der Menüs passend zur obigen Seitenstruktur.
Platzhalter für Template von domain-1.de:
Code: Select all
{cms_module module='menumanager' template='menuetemplate' collapse="1" number_of_levels="5" start_element="1.1" show_root_siblings="1"}
Code: Select all
{cms_module module='menumanager' template='menuetemplate' collapse="1" number_of_levels="5" start_element="2.1" show_root_siblings="1"}
Code: Select all
{cms_module module='menumanager' template='menuetemplate' collapse="1" number_of_levels="5" start_element="3.1" show_root_siblings="1"}
So, das wars dann auch schon. Das ganze ist bei mir bereits auf einer Live-Seite im Einsatz:
http://www.mercurewalsrode.de/
Es funktioniert bisher ohne Probleme.
Ein etwas anderen Ansatz wurde im englischsprachigen Forum diskutiert:
http://forum.cmsmadesimple.org/index.php/topic,22890.0.html
Vielleicht muss ja auch mal jemand anderes eine Multi-Domain-CMSms Installation machen.