Multisite: Subdomain oder Subfolder-Install?

Wenn man eine WordPress-Installation in eine Multisite umwandeln möchte, muss man entscheiden, ob die Websites in dieser Multisite als Subdomains oder als Unterverzeichnisse (Subfolders) organisiert werden sollen.

WordPress lässt einem zunächst keine Wahl, sollte die Website nicht mehr ganz neu sein. In dem Fall wird einem der Subdomain-Install nahegelegt. Aber was hat es damit auf sich? Und muss ich das wirklich so machen?

Wann würde ich einen Subfolder- und wann einen Subdomain-Install nutzen?

Es gibt unterschiedliche Gründe, warum man eine Multisite-Installation anlegen würde. Wir haben beispielsweise eine Multisite, in der wir diverse Test-Websites liegen haben. Oder eine Organisation betreibt mehrere kleinere Websites für unterschiedliche Projekte mittels einer Multisite. Das senkt den Wartungsaufwand, weil man nur eine WordPress-Installation pflegen muss. In all diesen Fällen würde ich zum Subdomain-Install raten. (Ich kann nicht nur Subdomains, sondern völlig unterschiedliche Domains nutzen. Details dazu findet ihr auf WordPress.org.)

Die häufigere Anwendung für mich ist aber, dass ich die Website in mehreren Sprachen anbieten möchte, beispielsweise mithilfe des Plugins MultilingualPress. In diesem Fall würde ich einen Subfolder-Install bevorzugen, da es sich um verschiedene Sprachversionen derselben Website handelt.

Was steckt hinter der Empfehlung, einen Subdomain-Install vorzunehmen?

Beim Subdomain-Install sehen die URLs für deine Websites später folgendermaßen aus:

  • deine-Domain.de (Haupt-Website, aus der die Multisite erzeugt wurde)
  • website2.deine-Domain.de (zweite Website in deiner Multisite)
  • website3.deine-Domain.de (dritte Website in deiner Multisite)
  • usw.

Beim Subfolder- oder Subdirectory-Install bekommst du diese URLs:

  • deine-Domain.de (Haupt-Website, aus der die Multisite erzeugt wurde)
  • deine-Domain.de/website2 (zweite Website in deiner Multisite)
  • deine-Domain.de/website3 (dritte Website in deiner Multisite)
  • usw.

Achtung, Verwechslungsgefahr!

Der wesentliche Unterschied besteht darin, dass beim Subdirectory-Install potenziell ein Verwechslungsrisiko besteht: Wenn eine meiner neuen Websites einen Namen hat, der auch als Beitrags- oder Seitentitel in der Haupt-Website vorkommt, erzeuge ich hier natürlich einen Konflikt.

Tatsächlich ist es so geregelt: Wenn ich eine neue Website anlege, die denselben Namen hat wie eine bereits existierende statische Seite, ist die statische Seite nicht mehr ansprechbar. Der Link führt auf die neue Website.
Wenn man die Seite mit dem gleichen Namen NACH dem Anlegen der Website gleichen Namens erstellt, bekommt der Slug der Seite eine Zahl angehängt, also deine-domain.de/seitenname-2.

Um solche Konflikte von vorneherein zu vermeiden, wurde also die Prämisse ausgegeben, dass Multisites aus älteren WordPress-Installationen grundsätzlich als Subdomain-Systeme angelegt werden sollen.

Was tun, wenn ich einen Subfolder-Install anlegen möchte?

Wenn ich alle Schritte erledigt habe, die zum Anlegen eines neuen Netzwerks führen, komme ich irgendwann an den Punkt, an dem ich meine wp-config.php-Datei und die .htaccess bearbeiten muss. Im WordPress-Backend werden mir die korrekten Code-Schnipsel angeboten, aber die sind für den Subfolder-Install vorgesehen.

Zunächst der Schnipsel für die wp-config.php:

Es wird mir Folgendes angeboten:

define( 'SUBDOMAIN_INSTALL', true );
Code-Sprache: JavaScript (javascript)

Da ich aber einen Subfolder-Install haben möchte, ändere ich das einfach um in:

define( 'SUBDOMAIN_INSTALL', false );
Code-Sprache: JavaScript (javascript)

Nun zur .htaccess-Datei. Hier müssen wir statt des Codes, der uns von WordPress angeboten wird, Folgendes einbauen:

# BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] RewriteRule . index.php [L] # END WordPress
Code-Sprache: PHP (php)

Von hier aus sollte nun alles nach Anleitung funktionieren.

Mittlerweile findet man auch auf WordPress.org eine Anleitung zum Wechseln des Netzwerk-Typs.