Multi-Domain Nutzung einer CMSms Installation mittels .htaccess Topic is solved

Deutschsprachiger Support für CMS Made Simple
Andiministrator

Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

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:

Code: Select all

$config['assume_mod_rewrite'] = true;
2.) Die Hierarchie muss eingeschaltet sein, um die angeforderte Hauptseite zu erkennen:

Code: Select all

$config['use_hierarchy'] = true;
3.) Die Page-Extension sollte auf '/' stehen:

Code: Select all

$config['page_extension'] = '/';
4.) Die Root-URL muss automatisch erkannt werden:

Code: Select all

$config['root_url'] = 'http://'.$_SERVER['HTTP_HOST'];
(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:

Code: Select all

# mod_rewrite (sprechende URLs) einschalten
RewriteEngine On
RewriteBase /
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:

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]
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:

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]
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):

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]
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):

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]
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):

Code: Select all

RewriteCond %{REQUEST_URI} ^/seite1/$
RewriteRule ^(.*) %{REQUEST_URI}unterseite1/ [NE,R=301,L]
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:

Code: Select all

# Rewrite rules for pages
RewriteCond %{REQUEST_FILENAME} !-f [NC]
RewriteCond %{REQUEST_FILENAME} !-d [NC]
RewriteRule ^(.+)$ index.php?page=$1 [QSA]
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:

Code: Select all

{cms_module module='menumanager' template='menuetemplate' collapse="1" number_of_levels="5" start_element="1.1" show_root_siblings="1"}
Platzhalter für Template von domain-2.de:

Code: Select all

{cms_module module='menumanager' template='menuetemplate' collapse="1" number_of_levels="5" start_element="2.1" show_root_siblings="1"}
Platzhalter für Template von domain-3.de:

Code: Select all

{cms_module module='menumanager' template='menuetemplate' collapse="1" number_of_levels="5" start_element="3.1" show_root_siblings="1"}
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.
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

[The extension txt has been deactivated and can no longer be displayed.]

Last edited by Andiministrator on Wed Apr 15, 2009 5:56 pm, edited 1 time in total.
maninweb

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by maninweb »

Hi Andiministrator...

schön und verständlich erklärt  :)

Mal 'ne Frage, das müsste doch auch, rein theoretisch, auch mit Subdomains gehen, oder?
Ich denke da wieder an Mehrsprachigkeit, man hätte dann z.B. www . de . domain .de,
www . en . domain . de, usw. Im CMS gibt's z.B. bei mir schon m.E. eine passende
Seitenstruktur, die 3 Roots bei Dir wären bei mir DE, EN und FR.

Gruß
Andiministrator

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

Ja, das sollte kein Problem sein. Ersetze dann einfach die Domains durch Deine Subdomains, also z.B. domain-1.de durch de.domain-1.de. Bei RewriteCond musst Du dem Punkt einen Backslah voranstellen, also z.B. RewriteCond %{HTTP_HOST} ^www\.de\.domain-1\.de
Andiministrator

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

Kurze Anmerkung: Durch die Umstellung auf CMSms 1.6.* sollte für die hier vorgestellte Methode nur noch die aktuelle Version meiner modifizierten config.php zum Einsatz kommen, zu finden unter http://forum.cmsmadesimple.org/index.php/topic,27619.0.html
Dejavu

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Dejavu »

Hallo,
sehr schöne Anleitung um Multidomainfähige Systeme zu erstellen. ich wollte es gerade testen jedoch wird leider die Einstellung "$config['assume_mod_rewrite'] = true;" als einziges nicht übernommen. Ich verwende deine verbesserte config.php und .htaccess.

Hast du eine Idee woran dies liegen könnte?

Viele Grüße Tobias
Andiministrator

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

Woran erkennst Du, dass das nicht übernommen wird? Hast Du die .htaccess eingespielt? Unterstützt Dein Webserver mod_rewrite?

Welche CMSms Version verwendest Du? Ab CMSms 1.6.x wird "assume_mod_rewrite" nicht mehr verwendet, sondern "url_rewriting":

Code: Select all

$config['url_rewriting'] = 'mod_rewrite';
Das ist aber in der config.php eigentlich auch enthalten.
Last edited by Andiministrator on Thu Sep 17, 2009 1:47 pm, edited 1 time in total.
Dejavu

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Dejavu »

Ich verwende die version 1.6.5 also die neuste.
Das mit assume_mod_rewrite wird mit im backend unter "Administrator - System-Informationen" angezeigt. Die .htaccess habe ich so wie sie war auf meinen server hochgespielt.
Mein Server unterstüzt es wohl - habe gerade mit den technischen support telefoniert (All-inkl.com)

Grüße Tobias
Andiministrator

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

Ist in der config.php der Parameter "url_rewriting" auf "mod_rewrite" gesetzt? (siehe unten)

Und ist in der .htaccess die Zeile

Code: Select all

RewriteEngine On
enthalten und nicht kommentiert?
Last edited by Andiministrator on Thu Sep 17, 2009 3:04 pm, edited 1 time in total.
Dejavu

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Dejavu »

Ja ich habe gerade nochmals deine neuste config.php aus dem anderen thread aufgespielt und die .htaccess gescheckt. Soweit sollte dabei alles stimmen :(.

Im CSMSM Admin System steht immer noch

Code: Select all

"assume_mod_rewrite: false"
Last edited by Dejavu on Thu Sep 17, 2009 2:51 pm, edited 1 time in total.
Andiministrator

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

Tut mir leid, eine andere Einstellung als die genannten für mod_rewrite kenne ich nicht.
Dejavu

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Dejavu »

Vielen Dank für deine Hilfe - ich werde die tage mal ein wenig tüfelten evtl finde ich ja eine Lösung :)

Edit: Ich glaube ich habe die Lösung - die config.php ist hochgeladen und geändert aber leider wird keine der Änderungen übernommen. Habe eben das upload verzeichnis geändert und naja es ist immer noch das alte angegeben bei den System Informationen
Last edited by Dejavu on Thu Sep 17, 2009 8:58 pm, edited 1 time in total.
NaN

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by NaN »

Dejavu wrote: Edit: Ich glaube ich habe die Lösung - die config.php ist hochgeladen und geändert aber leider wird keine der Änderungen übernommen. Habe eben das upload verzeichnis geändert und naja es ist immer noch das alte angegeben bei den System Informationen
Ich vermute mal ein Berechtigungsproblem.
Die Config.php wird aus Sicherheitsgründen nicht beschreibbar sein (Rechte 444).
Ändere mal die Rechte der Config.php auf 777, lade die neue Config.php hoch und setze dann die Rechte wieder auf 444.
Das geht am einfachsten mit einem FTP Programm wie z.B. Filezilla.
nhaack

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by nhaack »

Hi Andiministrator,

sehr cooler Post!

$config['root_url'] = 'http://'.$_SERVER['HTTP_HOST'];
Ist 'ne interessante Idee das Ganze anzugehen. Für Mittelständer mit mehreren Marken ist das ein guter Ansatz, wenn alles in einem System verwaltet werden soll. Da kann man tolle Conntent-Vererbungsgeschichten mit gestalten.

Z.B. auf allen Domains eine kleine Box mit News-Headlines des Mutterunternehmens ausgeben und direkt verlinken (z.B. über Globale Content-Blöcke und Content-Dump). Hier müsste man nochmal überlegen, wie ich im Template herausfinden kann, von welcher Site die News kommen um  die richtigen Links zu bauen (z.B. ID-Hierarchy parsen und nach ID der Startseite einer Domain suchen und dann entsprechend die Domain voranstellen.

Denn wenn ich den Ansatz richtig verstehe, kann ich z.B. {cms_selflink} zum aufbauen der Links nicht verwenden (wenn ich Automatisieren möchte). {cms_selflink page="Alias-unterseite3"} würde dann ja auf "http://www.domain-1.de/Alias-unterseite3" verweisen, wenn der Befehl von Domain-1 aufgerufen wurde, auch wenn "Alias unterseite3" eigentlich unter Domain-2 liegt. Wenn ich deine Erläuterungen richtig verstanden habe, führst du einen 301 Redirect in diesem Falle auf die richtige Domain aus.

Im Idealfall würde ich aber gernre direkt verlinken (also ohne Redirect). Man könnte natürlich (wenn man den Alias kennt und für diese Links die Quelle nur Domain-2 sein kann) im Template dann quasi "http://www.domain-2.de/{$alias}" schreiben, wobei ich bei hierarchisch aufgebauten URLs alle oberhalb liegenden Seite abfragen müsste (macht selflink im Grunde ja auch, aber das gibt es schon ;))

Man könnte natürlich in {cms_selflink} einen weiteren Parameter zur Spezifikation der Domain mit einbauen... mhh

Wie würdet ihr hier vorgehen?

Beste Grüße
Nils
Andiministrator

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by Andiministrator »

Hallo Nils,

Der Tag {cms_selflink} funktioniert eigentlich ohne Probleme, weil er ja relative Links erzeugt. Es steht also nur der Page-Alias (hierarchisch) und nicht die Domain im Link. Durch die Regeln in der .htaccess wird automatisch die passende Domain zum Alias vorangestellt.

Das Feststellen der aktuellen Domain dürfte auch einfach sein, über PHP kann man ja den Domainnamen einfach abfragen. Für Smarty kann man ja ein kleines Plugin schreiben.

Wir haben bei ein paar Seiten diese Lösung im Einsatz und bisher keine Probleme feststellen können (solang man auch den TinyMCE mit relativen Links verwendet). Ich hatte sogar schonmal überlegt, das ganze als Modul umzubauen und die Umleitungen rein über PHP zu steuern. Dann könnte man das ganze auch ohne Hierarchie nutzen. Aber derzeit stehen auf meiner ToDo-Liste erst einmal zwei andere Module.

Viele Grüße
Andi
User avatar
amh
Forum Members
Forum Members
Posts: 187
Joined: Sun Apr 17, 2005 2:40 pm
Location: Germany -- Augsburg

Re: Multi-Domain Nutzung einer CMSms Installation mittels .htaccess

Post by amh »

Servus Zusammen,

diese Anleitung ist ja perfekt! Vielen Dank!

Doch auch mit der besten Anleitung mag es mir Nulpe leider nicht gelingen  :'(

1. Frage dazu: Welchen Typs sind die »domain-1.de« im System angelegt?
– Inhalt
– Interner Seitenlink
oder
– Abschnittsüberschrift (habe ich gerade)

Ich habe »ich-bin-die-domain.de« (Alias Startseite = willkommen) und »i-am-the-domain.com« (Alias Startseite = welcome).
__/\_|\/|_|-|__  --  designer not coder
Post Reply

Return to “German - Deutsch”