WordPress Multidomain-fähig

21. September 2008 | Von | Kategorie: Domain Knowhow

Viele Domainer projektieren inzwischen Ihre Domains mit WordPress, dabei ist es immer mühsam, für jede Domain eine komplett neue WordPress Installation vornehmen zu müssen. Mit einer kleinen Änderung ist es aber möglich, WordPress Multidomain-fähig zu machen. Hier eine kleine Anleitung:

Voraussetzungen:

Der Webspace muss die Möglichkeit bieten, mehrere Domains zu verwalten. Außerdem muss es möglich sein, einzelne Domains zu ein und demselben Ordner zu leiten. Sofern suchmaschinenfreundliche Urls zum Einsatz kommen sollen, muss mod_rewrite aktiv sein und es ebenfalls zulassen, dass mehrere Domains im gleichen Ordner betrieben werden.

WordPress mit der ersten Domain installieren:

Hinweis:
Das Ganze funktioniert nur, wenn die erste Domain nach dieser Anleitung installiert wurde. Eine Änderung innerhalb einer bereits vorhandenen Installation ist nicht möglich, bzw. nur mit manueller Änderung der Tabellen der Erstinstallation möglich.

  1. WordPress downloaden
  2. Dateien lokal entpacken
  3. Hauptordner gegebenenfalls umbenennen (z.B. blogs)
  4. Datei wp-config-sample.php in wp-config.php umbenennen
  5. Die Datei wp-config.php in einem Texteditor öffnen und wie folgt ändern:

In den ersten Zeilen die Zugangsdaten für die Datenbank eingeben.
Dann folgende Passage suchen:

// Wenn du verschiedene Präfixe benutzt, kannst du innerhalb einer Datenbank
// verschiedene WordPress-Installationen betreiben.
$table_prefix  = ‚wp_‘;   // Nur Zahlen, Buchstaben und Unterstriche bitte!

Die obigen drei Zeilen löschen und stattdessen folgendes eintragen:

// Aenderung Richard Martin fuer Multidomainfaehigkeit.
$table_prefix = ereg_replace(‚^(www\.)‘, “, $_SERVER[‚HTTP_HOST‘]); $table_prefix = ereg_replace(‚\.‘, “, $table_prefix); $table_prefix = ereg_replace(‚\-‚,“, $table_prefix); $table_prefix = $table_prefix . ‚_‘;

Änderungen spreichern und Editor beenden.

  1. Ordner (in unserem Beispiel "Blogs") komplett zum Webspace hochladen.
  2. In der Webspace Verwaltung die erste Domain zum Ordner "/blogs" leiten.
  3. Eventuell mod_rewrite Einstellungen vornehmen.
  4. WordPress Installation www.domain.tld/wp-admin/install.php aufrufen und den Anweisungen folgen.

Weitere Domains installieren:

  1. In der Webspace Verwaltung die entsprechende Domain zum Ordner "/blogs" leiten.
  2. Eventuell mod_rewrite Einstellungen vornehmen
  3. WordPress Installation www.domain.tld/wp-admin/install.php aufrufen und den Anweisungen folgen.

Komplettpaket WordPress 2.6.2 Multidomain

Um das Ganze etwas einfacher zu gestalten, habe ich eine komplett angepasste WordPress Version inklusive einiger sinnvoller Plugins sowie das Theme Kredit-Blog (demnächst mehr) zum Download bereitgestellt:

Download WordPress 2.6.2 Multidomain

Nach dem Download bitte entpacken und Anweisungen in der blogs/install.txt folgen.

Jede Domain ihr eigenes Theme

Dies nur als Empfehlung!
Wenn man viele Domains projektiert verliert man leicht den Überblick, so macht es Sinn ein Theme für jede Domain anzulegen. Soll ein bereits vorhandenes Theme zum Einsatz kommen, empfielt es sich, den kompletten Themeordner zu kopieren und umzubenennen. Den Themenamen kann man zur besseren Übersicht ebenfalls ändern.

Ich wünsche viel Spaß damit.

Schlagworte: ,

60 Kommentare auf "WordPress Multidomain-fähig"

  1. Hi Richard,

    Ich benutze diese Methode schon seit einer Weile und es lohnt vor allem in dem Sinne, dass man nur eine Installation von WordPress hat wenn man ein Update einspielen muss.

    Ein kleine Aenderung fuer Deinen Code wuerde ich aber vorschlagen, die vor allem wichtig ist, wenn jemand mit einem alten Browser (z.b. Netscape 4.5) auf Deine Site kommt, wie bei mir das gerade passiert ist. Da die alten Browser den Hostnamen in gemischter Gross & Kleinschreibung senden, koennen naemlich Deine Aenderung leider nicht unbedingt immer die Datenbank finden. Daher wuerde ich die $_SERVER[‚HTTP_HOST‘]) variable in „lowercase“ umwandeln bevor Du es als Datenbank-Prefix benutzt:

    $hostname = strtolower ( $_SERVER[‚HTTP_HOST‘] );

    Und dann in den folgenden Zeilen $hostname statt $hostname = strtolower ( $_SERVER[‚HTTP_HOST‘] );.

    Allerdings muss man ein bisschen bei den File-Uploads und Plugins aufpassen, die Directories benutzen, da ja jetzt alles Blogs auf dasselbe Verzeichnis zugreifen. Ich habe das so geloest, dass ich fuer File-Upload ein Unterverzeichnis pro Domain anlege und fuer Sitemaps zum Beispiel (mit dem Sitemap plugin) auch den Domainnamen als Teil der Sitemap nenne. Fuer das robots.txt File habe ich noch keine richtig gute Loesung gefunden.

    Insgesamt denke ich das diese Loesung gut ist fuer unter 100 blogs, da man sicherlich ansonsten auch die User und Logindaten unter allen Blog zusammen haben moechte, und nicht separat.

    Gruss
    /FM

  2. Richard sagt:

    Hallo Frank,

    schön, Dich hier als Leser zu begrüßen!

    Ich glaube, die aktuelle Lösung stammt sogar von Dir. Jedenfalls kann ich mich erinnern, irgendwann einen Änderungsvorschlag von Dir aufgenommen zu haben. Deine jetzigen Vorschläge werde ich natürlich auch testen, danke dafür.

    Sag Mal, Du schreibst in Deinem Blog nichts mehr?
    Das letzte ist wohl eine Weile her!

    Gruß
    Richard

  3. […] Thematik Mehrere Domains mit einer WordPress Installation habe ich erst gestern was geschrieben: WordPress Multidomain-faehig Vielleicht ist die Anleitung hilfreich. Ebenso: Tx a lot! __________________ […]

  4. Frank Michlick sagt:

    Richard,

    Ich lese hier schon seit einer Weile und gerne mit.

    Ich schreibe fast nur noch auf DomainNameNews.com/DNN.com im Moment und habe ansonsten auch noch gut mit vielen anderen Projekten zu tun… Aber das i.m.fm blog steht auch auf der ToDo liste, es muss aber erstmal auf WordPress umziehen.

    Gruss
    /FM

  5. Markus sagt:

    Das robots.txt problem kann man ähnlich lösen. Man muss nur per mod-rewrite die robots.txt auf eine robots.php weiterleiten und dann entsprechend der domain ausgeben lassen. ( ungetestet! )

  6. Gerald sagt:

    Interessanter Beitrag. Evtl. wäre ein anderes Thema „Sinnvolle Plugins“.

    Gruss Gerald

  7. Richard sagt:

    Die Plugins, die in meinen Augen nirgends fehlen sollten sind folgende:

    advanced-excerpt – Erlaubt Formatierungen in der Kurzfassung
    akismet – Wichtig!!! Gegen Spam (WordPress API Schlüssen nötig)
    all-in-one-seo-pack – Alles, was man für die SEO Optimierung braucht
    fckeditor-for-wordpress-plugin – Umfangreicher Editor
    wp-statpress – Zugriffs Statistiken

    Vielleicht schreibe ich mal demnächst was über diese und weitere Plugins.

  8. […] Die Variable $table_prefix in der Datei wp-config.php enhält per Default den statischen Wert „wp_“. Das ist das Präfix mit dem die Tabellen in der Datenbank benannt werden. Diese Variable könnte man je nach aufgerufener URL dynamisch mit einem anderen Wert belegen, so dass andere Datenbanktabellen angesteuert werden. Ein kleines HowTo gibt es hier. […]

  9. Micha sagt:

    Hi,

    diese Lösung ist genau das, was ich suche, vielen Dank! Allerdings bin ich ein absoluter mod_rewrite-Laie. Welche Einstellungen sollte man denn sinvollerweise vornehmen, damit Google jede Domain als vollwertig erkennt und in den Suchkatalog mit aufnimmt?

    Vielen Dank für einen Tipp.

  10. Dirk sagt:

    Könntest Du bitte mal beschreiben, wie die .htaccess / mod rewrite aussehen muss, wenn man mehrere Domains in einer WP-Installation betreiben will.
    Nach vielem Googeln und lesen im Forum von modrewrite.de habe ich keine brauchbare Lösung gefunden.
    Könnte man die Rewrite Rule auch so gestalten, dass man jede Domain mit einem anderen Theme betreiben könnte?

  11. Richard sagt:

    Die .htaccess Datei ist für diesen Vorgang absolut irrelevant. Einfach die standard .htaccess Datei benutzen, die von WordPress vorgegeben wird.

  12. […] I like doing things differently That’s why I started playing around with an idea suggested by Richard Martin (german only). He suggested to use $_SERVER[‚HTTP_HOST‘] inside wp-config.php in order to get a unique […]

  13. David sagt:

    Hallo Richard,
    habe Deine Anleitung nun bei WordPress 2.8 angewendet. Würde mich sehr interessieren, ob jemand Erfahrungen mit plugins hat, so wie es aussieht, kann jede Einzelanwendung verschieden plugins verwalten ???
    und verschieden Themes .
    VG
    David

  14. Richard sagt:

    Das steht Dir alles frei. Du kannst so viele Plugins hochladen wie Du willst und, je nach Bedarf, für einzelne Blogs aktivieren.

    Bei den Themes ist es genauso, wobei ich da sinnvollerweise kein Theme für zwei Blogs nutzen würde. Gegebenenfalls Themes einfach duplizieren mit anderem Namen, damit die Zuweisung eindeutig ist, sonst kommt man irgendwann durcheinander.

  15. David sagt:

    Danke.
    Sind Dir irgendwelche Probleme bekannt, die Du bei Deiner Installation behoben hast ?
    Oder Probleme mit Plugins wegen der Codeänderung ?
    Probleem mit der Datenbank ?
    Soll noch etwas anderes beachtet werden, so aus Deiner Erafhrung ?
    VG
    Davie

  16. Richard sagt:

    Nein, ich habe diese Lösung mehrfach am laufen und Probleme gibt es keine.

    Nur eine Kleinigkeit: Du kannst keine Sitemap.xml im Root-Verzeichnis nutzen, da diese verständlicherweise nicht für alle Domains gültig sein kann.

    Lösung: Ein Unterverzeichnis beispielsweise unter wp-content/sitemaps/(domainname)erstellen und die Sitemap.php dort hinterlegen. Danach bei Google in den Webmastertools eintragen.

    Ich habe mir vorgenommen eine etwas clevere Lösung über .htacces dafür zu entwickeln. Kommt noch!

  17. David sagt:

    dann kann ja nur eine Sitemap für die Anwendung angefertigt werden, oder meinst Du für jede Domain eine Sitemap in ein Verzeichnis erstellen, wo vorher die sitemap.php rein kopiert wurde ?
    Grss

  18. Richard sagt:

    Bisher lege ich gesondert Ordner an und deponiere dort einzelne sitemap.xml und sitemap.tar.gz Dateien für eine bestimmte Domain. Dann muss der Pfad in den Webmastertools eingetragen werden und fertig.

    Es wäre natürlich besser, das Ganze zu automatisieren. Da mache ich mich dran sobald ich etwas Zeit habe.

  19. David sagt:

    Ja, aber trotzdem, super Idee mt nur 4 Zeilen code, ich habe mich 7 Tage mit wordpress MU herumgequellt, was einfach nciht ausgereift ist und viele Tücken hat, besonder im Pluginberich.
    Gruss
    David

  20. David sagt:

    Wie umgehst Du folgendes?
    Google Webmastertools lässt nur die Einreichung von sitemaps zu sog. „bestätigten domains zu“. Da nach der Installation die „zweite domain“ ja, den Pfad der „ersten Domain“ hat und nicht ihren „richitgen“ Pfad, kann google nichts im eigentlichen Verzeichnis finden, da die domain ja auf einen adneren Pfad hinweist. Also kann man das Konto nicht bestätigen.
    VG
    David

  21. Richard sagt:

    Hm, ich verstehe die Frage nicht ganz. Zwar laufen alle Domains auf einen Ordner zusammen, trotzdem ist jede Domain unter der eigenen Adresse erreichbar, also gültiger Pfad.

  22. David sagt:

    domain1.com ist Haupt domain,
    domain2.com weitere domain mit pfad auf domain1.com,d.h. wenn google auf domain2.com zugreift, landet er in domain1.com und domain2.com ist ja gar nicht erreichbar. physikalisch.

  23. Richard sagt:

    Da hast Du irgendwas falsch oder Du brauchst einen anderen Webhoster. Die Domains sollen zwar zum gleichen Ordner leiten aber nicht zu einander.
    Domain 1 – > leitet zum Ordner /blogs (Beispiel)
    Domain 2 – > leitet ebenfalls zum Ordner /blogs
    …usw.

  24. David sagt:

    na, ich glaube, wir reen jetzt völlig nebeneinander.
    Domain 1 – > leitet zum Ordner /blogs (Beispiel)
    Domain 2 – > leitet ebenfalls zum Ordner /blogs
    genau, also ist domain 2 nicht wirklich domain 2, sondern domain 1.

  25. Richard sagt:

    Schau Dir mal Deine Webspace Verwaltung an. Dort müsstest Du auch Deine Domains verwalten können und bestimmen, wo welche Domain physikalisch hin soll. Wenn Du diese Möglichkeit nicht hast, ist Dein Webhosting Paket für diese Lösung nicht geeignet.

  26. David sagt:

    na, das passt schon, kann das nicht erklären, was ich meine. Aber es ist schon ok
    Danke

  27. stern sagt:

    ich bekomme immer eine leere seite angezeigt, wenn ich die install.php aufrufen will. es liegt definitiv an den von dir veränderten zeilen, weil in der „urform“ von wordpress 2.8.2 klappt es. will aber mehrere blogs haben! ;o) ist das problem, dass ich 2.6.2 verwenden müsste oder woran kann das liegen?

  28. stern sagt:

    oh, hab jetzt den code aus der von dir bereitgestellten wordpress 2.6.2 genommen – damit scheint’s zu klappen!

  29. Richard sagt:

    Dann war wohl vorher, beim Kopieren, irgendwas falsch. Das Ganze funktioniert einwandfrei, auch bei den neueren WordPress Versionen.

  30. David sagt:

    Hi Richard,
    welchen Webshoster hast Du ?
    Kannst Du das Verzeichnis im cpanel setzen oder must Du dies in der htacces machen ?
    David

  31. David sagt:

    ich meine, ob all das im cPanel gemacht werden kann ?

    „Der Webspace muss die Möglichkeit bieten, mehrere Domains zu verwalten. Außerdem muss es möglich sein, einzelne Domains zu ein und demselben Ordner zu leiten. Sofern suchmaschinenfreundliche Urls zum Einsatz kommen sollen, muss mod_rewrite aktiv sein und es ebenfalls zulassen, dass mehrere Domains im gleichen Ordner betrieben werden.“

  32. Richard sagt:

    Sofern Du in Deinem cPanel Hosting Tarif die Möglichkeit hast Add on Domains einzutragen, kannst Du diese Problemlos einem Ordner zuweisen. Einfach die betreffenden Domains zum Ordner schicken, wo Du die Multidomain Installation hast.

  33. David sagt:

    Hi Richard,
    habe dies Super-Idee nun mit mehreren Domain und mehrfach für bestimmte Themenbereiche.
    Klappt das auch mit Subdomains oder nur Hauptdomains ?
    Danke
    David

  34. Udo sagt:

    Hallo Richard!

    Worin siehst Du denn den Vorteil gegenüber einer Installation mit WPMU?
    Gruß

    Udo

  35. Richard sagt:

    Mit WPMU und das entsprechende Plugin „1193384369_njsl-sites-009“ ist es ohne weiteres möglich, das gleiche Ergebnis zu erziehlen. Das bleibt jedem selbst überlassen.

    Kleiner Nachteil bei WPMU:
    Sollte ein Projekt verkauft werden, ist eine Konvertierung zum normalen WordPress sehr Aufwendig.

  36. Florian sagt:

    Kann es sein, dass die aktuellste WP Version nicht mit den Codeänderungen läuft? Ich bekomme folgenden Fehler:

    Parse error: syntax error, unexpected ‚)‘ in /www/htdocs/XXXXX/blogs/wp-config.php on line 35

    Jemand eine Idee?

  37. Richard sagt:

    Doch, es funktioniert einwandfrei, auch mit WP 2.8.4. Dein Problem entsteht wohl beim Copy und Paste, möglicherweise hat es mit der Codierung Deines Editors zu tun. Als Abhilfe habe ich jetzt eine Standard wp-config.php erstellt, die funktionierende Änderung eingebaut und zum Download bereitgestellt. Bitte Downloaden, entpacken und Datenbank Verbindungsdaten eintragen. Dann hochladen und es sollte funktionieren.
    WordPress: geänderte wp-config.php

  38. Florian sagt:

    Perfekt! Now it works. Danke Dir! 😉

  39. Florian sagt:

    Was vielleicht noch gut wäre: Das man für bestimmte Prefixes andere Datenbankeinstellungen vornehmen kann, also so in der Art if($table_prefix == „xxxxx_“) dann eine andere Datenbank, so könnte man verhindern das man nicht 100 Blogs in einer Datenbank betreiben muss, sondern es aufsplitten kann. Hat da jemand eine Idee?

  40. Richard sagt:

    Sowas kannst Du bei Bedarf leicht einbauen, ist aber eventuell nicht sooo sinnvoll. Diese Lösung ist eigentlich nur für so um die 10 Blogs sinnvoll und auch nur dann, wenn sie nicht besonders umfangreich sind. Wenn Du mehr Blogs betreiben willst, würde ich sie eher in mehrere Installationen aufteilen oder eventuell lieber WPMU einsetzen.

  41. Florian sagt:

    Also von WPMU möchte ich eher Abstand halten. Habe keine guten Erfahre damit gemacht, die Zahl von 100 Blogs war jetzt auch eher beispielhaft 🙂

    Habe jetzt hier noch https://www.codersx.net/blog/96/mehrere-blogs-mit-einer-wordpress-installation-betreiben eine weitere Lösung gefunden, bei der es möglich ist, die Blogs auf unterschiedliche Datenbanken aufzuteilen. Werde das sicherlich mal ausprobieren.

  42. Moin Moin,

    habs die ganze Zeit versäumt, nun hole ich
    es nach: Danke für das Plugin, hat mir jede
    Menge Ärger vom Hals geschafft. Feine Sache!

    Ahoi!

  43. XminD sagt:

    Hallo
    Darf ich Euch scharf am Thema vorbei eine Frage stellen?
    Ich habe WP auf einer Multi-Domänen site installiert. WP soll dabei in allen sites erscheinen, aber als ein Blog und nicht als mehrere.
    WP funktioniert dabei problemlos, wenn ich in der Admin unter Einstellungen / Allgemein bei WP-Adress und Blog-Adress jeweils eine volle URL angebe. Also z.B. "https://www.beispiel.de/blog". Der Nachteil dabei ist, dass dann WP als Links auch diese Domain nimmt. Wenn ich dann unter https://www.bsp2.de/blog blogge, dann wird beim ersten Klick auch gleich http://www.beispiel.de geladen.
    Gebe ich in der Admin nur relative URLs ein, dann funktioniert WP auch. Sogar bloggen auf http://www.bsp2.de bleibt auch auf http://www.bsp2.de. Der grosse Nachteil aber ist, dass dann RSS nicht mehr funktioniert.
    Scheint also, dass WP volle URLs benötigt, damit z.B. RSS auch funktioniert.
    Habt Ihr dazu eine Lösungsidee?

  44. […] Originalidé från Richard Martin. […]

  45. Sepp71 sagt:

    Vielen Dank!
    Mit der zip-Datei habe ich es dann auch hinbekommen. Copy & Paste aus dem Artikel ging nicht, weil die Anführungszeichen etc. fehlerhaft nacht Notepad++ transportiert wurden-

    Gruß
     Sepp

  46. […]Für die Version 2 gibt’s da eine Anleitung von McDot, die ich hier gerne auch noch mal Verlinke, die vielleicht sogar auch für Version 3 funktionieren würde, aber auf keinen Fall die Vorteile der neuen Multisite-Option nutzen würde […]

  47. floES sagt:

    ereg_replace ist in PHP 5.3 deprecated !
    Aber es geht ja auch einfacher in einer Zeile (zusammen mit Franks strtolower):

    $table_prefix = preg_replace('/^www|\.|\-/', '', strtolower($_SERVER['HTTP_HOST'])).'_';

    Wobei man den Bindstrich eigentlich auch besser drinlassen könnte – wer weiss, ob man nicht mal 2 Domain-Varianten projektieren will. (Und wenn nicht, dann würde man ohnehin eine Weiterleitung einrichten, anstatt duplicate content zu erzeugen.)
    Für eine frische Installation erscheint mir besser:

    $table_prefix = preg_replace('/^www|\./', '', strtolower($_SERVER['HTTP_HOST'])).'_';
  48. floES sagt:

    Mit letztem hatte ich mich wohl getäuscht. MySQL erlaubt zwar mW Bindestriche in Tabellennamen, WordPress jedoch nicht!

    Daher sieht mein $table_prefix nun so aus:

    $table_prefix = preg_replace(array('/^www\./','/\./','/-/'), array('','_','_'), strtolower($_SERVER['HTTP_HOST'])).'_';

    Auf deutsch: Nimm "www." vorne weg und ersetze Punkte und Bindestiche durch Unterstriche!

  49. Daniel sagt:

    Hallo,
    ich würde mich sehr freuen, wenn du für die neue WordPress Version 3.01 auch wieder ein Komplettpaket mit der Multidomainfähigkeit zum Download anbietest.
    Tschau Daniel

  50. Richard sagt:

    Danke für die Anregung. Eine neue Überarbeitung ist geplant. Ich wollte sie sogar vor ein Paar Wochen fertig machen, bin aber leider noch nicht dazu gekommen.

    Also, kommt noch…

Schreibe einen Kommentar