Dieser Beitrag soll Anregungen aufzeigen, wie eine schon eine bestehende Permalinkstruktur in WordPress geändert werden kann.
Einleitung
Viele Benutzer von WordPress merken oft leider erst zu spät, dass die gewählte Permalinkstruktur nicht den eigentlichen Wünschen entspricht und möchten diese Struktur nachträglich verändern.
Eine Internetadresse (URL), die aus Zeichen und Nummern nach der Domain besteht ist nicht sehr leserlich oder gar einprägsam. Auch sollen Suchmaschinen mit „sprechenden URL´s“ deutlich besser umgehen können.
Beispiel
- vorher – http://jerret.de/?p=109
Fall
Ich möchte hier auf meinen speziellen fall eingehen, da all die vielen Tutorials im Internet davon ausgehen, dass die Blogs bei Webhostern liegen oder dass man einen eigenen root-Server hat, der nur eine einzige Domain verwalten muss.
Ich dagegen habe gleich mehrere Domains mit jeweils anderen Internetauftritten und jeder Internetauftritt braucht eine andere Webserverkonfiguration.
Wie hab ich es hinbekommen?
Im Prinzip ist es ganz einfach! Es bedarf genau 3 Schritte:
-
Download/Installation WordPress Plugin von Dean Lee
-
richtige Serverkonfiguration einstellen (mod_rewrite, Name-based Virtual Hosts, .htaccess)
-
Anwendung des WordPress Plugins
Das hört sich eigentlich sehr einfach an. In meinem Fall jedoch war es nicht so einfach! Auf den ersten Punkt „Download/Installation WordPress Plugin von Dean Lee möchte ich nicht näher eingehen. Ich gehe davon aus, dass Standardinstallationen von Plugins unter WordPress hinreichend bekannt sind. Genauer möchte ich jedoch Punkt 2 ausführen! Dort lag die eigentliche Arbeit und bedarf einer ausführlichen Betrachtung. Um diesen Beitrag dann abzuschließen, werde ich noch kurz auf die Anwendung des Plugins (Punkt 3) eingehen.
Download/Installation des WordPress Plugins von Dean Lee
siehe : http://www.deanlee.cn/wordpress/permalinks-migration-plugin/
richtige Serverkonfiguration einstellen
Server:
Suse Linux 10.0
Apache Webserver 2.0.54
MySQL 4.1.3
Einige von euch werden sicher schon festgestellt haben, dass eine einfache Aktivierung des Webservermoduls „mod_rewrite“ nicht ausreicht, um die Permalinkstruktur nachträglich zu verändern.
Stichwort:
interner Serverfehler 500
Zugriff verweigert 403
mod_rewrite Aktivieren
Die Aufgabe des Moduls „mod_rewrite“ ist, URL´s so umzuformen, dass URL´s lesbar werden. Dieses Modul ist bei WordPress zwingend erforderlich, wenn man nicht mit der voreingestellten Permalinkstruktur arbeiten möchte.
Die einfachste Art das Modul zu aktivieren ist einen Eintrag in der Datei /etc/sysconfig/apache2 vorzunehmen und den Webserver neu zu starten. Dazu musst Du Dir fogende Zeile in dieser Datei suchen:
APACHE_MODULES=“access actions alias auth auth_dbm autoindex cgi dir env expires include log_config mime negotiation set envif ssl suexec userdir php5 rewrite„
Bei mir steht diese Zeile in Zeile 79. Am Ende (die Position ist aber egal) der Zeile, vor den schließenden Anführungszeichen („) habe ich das Word rewrite notiert. Jetzt wird der Apache angewiesen, bei einem Neustart des Services, das Modul „mod_rewrite“ zu laden.
Webserver Neustart
Ein Neustart des Webservers ist sehr leicht. Dazu gibt es 2 Befehle (Es gibt noch mehr Möglichkeite, gehe hier jedoch nicht darauf ein…). Je nach Präferenz kannst Du Dir einen davon aussuchen. Jeder dieser Befehle muss mit root-Rechten ausgeführt werden:
- rcapache2 restart -> (Suse Linux typisch)
- /etc/init.d/apache2 restart ->(Standard)
Status von mod_rewrite überprüfen
Nach dem Neustart, ist es natürlich wichtig zu wissen, ob das neue Modul vom Webserver geladen wurde. Ein Blick in die Datei /etc/apache2/sysconfig.d wird dabei Helfen. Die Stelle an der Du das rewrite-Modul in /etc/sysconfig/apache2 in der Zeile für APACHE_MODULES notiert hast, bestimmt auch die Reihenfolge der vom Webserver zu ladenen Module. Folgerichtig müsste jetzt bei der Überprüfung der angegebenen Datei ersichtlich sein, dass das rewrite-Modul als letztes geladen wurde.
…
LoadModule setenvif_module /usr/lib/apache2-prefork/mod_setenvif.so
LoadModule ssl_module /usr/lib/apache2-prefork/mod_ssl.so
LoadModule suexec_module /usr/lib/apache2-prefork/mod_suexec.so
LoadModule userdir_module /usr/lib/apache2-prefork/mod_userdir.so
LoadModule php5_module /usr/lib/apache2/libphp5.so
LoadModule rewrite_module /usr/lib/apache2-prefork/mod_rewrite.so
Ist mod_rewrite aufgeführt, dann ist das Modul richtig geladen.
Named-Based Virtual Hosts
Lässt man auf einem Host mit nur einer IP-Adresse verschiedene Domains/Internetauftritte laufen, kommt man nicht darum herum sich mit diesem Begriff auseinanderzusetzen.
Da Domainnamen immer zu IP-Adressen aufgelöst werden, ich jedoch mehrere Domains/Internetauftritte mit nur einer IP-Adresse verwalte, muss ich meinem Apache Webserver beibringen, dass Anfragen an bestimmte Domains jeweils mit dem richtigen Content beantwortet werden.
Dazu bietet mir der Apache Webserver in seinen Konfigurationsdateien an, sogenannte „Named-Based Virtual Hosts“ einzurichten. Wie das im einzelnen geht, möchte ich hier nicht genauer ausführen. …Diejenigen von Euch, die das gleiche Problem haben, wissen wo von ich hier schreibe…
Um es hier einfach zu halten, gebe ich einen Ausschnitt meiner Webserverkonfiguration zum Besten:
NameVirtualHost *
<VirtualHost *>
ServerName www.jerret.de
ServerAlias xxx.jerret.de
DocumentRoot /srv/www/verzeichnis1
<Directory „/srv/www/verzeichnis1“>
Options FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
.
.
.
</Directory>
</VirtualHost>
<VirtualHost *>
ServerName www.meine_2te_Domain.de
ServerAlias xxx.meine_2te_Domain.de
DocumentRoot /srv/www/verzeichnis2
<Directory „/srv/www/verzeichnis2“>
„Andere oder gleiche Anweisungen für Verzeichnisrechte“
</Directory>
</VirtualHost>
Mit dieser Konfiguration versetze ich also meinen Webserver in die Lage Anfragen an www.jerret.de mit den Inhalten aus /srv/www/verzeichnis1 und Anfragen an www.meine_2te_Domain.de mit Inhalten aus /srv/www/verzeichnis2 zu beantworten. Genau so richte ich auch Subdomains ein. Dort steht dann lediglich folgendes:
<VirtualHost *>
ServerName www.fotos.jerret.de
ServerAlias xxx.fotos.jerret.de
DocumentRoot /srv/www/pics
<Directory „/srv/www/pics“>
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Wie bei jeder Änderung an der Konfiguration des Webservers muss auch hier ein Neustart des Dienstes erfolgen.
So, das waren in meinem Fall alle Änderungen, die ich vornehmen musste, um meine Permalinkstruktur ändern zu können. Egal, was ich vorher gemacht habe, ich hatte immer das Problem, dass ich einen internen Serverfehler verursachte oder mir der Zugriff auf meine Seiten verweigert wurde.
.htaccess
Bei Änderung der Permalinkstruktur wird von WordPress eine Datei erstellt, die erweiterte Verzeichnisrechte defeniert. Diese Datei „.htaccess“ wird im Stammverzeichnis der Worpressinstallation notiert. Hier muss sichergestellt sein, dass WordPress (genauer gesagt, der Webserver) in dieses Verzeichnis (hier verzeichnis1) schreiben darf. Nutzer eines eigenen root Servers wissen wie das geht und ich werde es hier nur kurz beschreiben.
Der Webserver Apache wird unter Linux/Unix als eigener Benutzer geführt, der vom System ähnlich behandelt wird, wie Standarduser. Man kann also diesem User, in der Regel „wwwrun“ explizit Schreibrechte auf Verzeichnisse und Dateien zuweisen. Hier gibt es auch verschiedene Möglichkeiten. Ich Nutze für Verzeichnisse, in denen ausschließlich Webinhalte liegen, folgenden Befehl:
chown -R wwwrun:www /srv/www/verzeichnis1
Dieser Befehl besagt: Übergebe angegebenes Verzeichnis mit allen Unterverzeichnissen und Dateien in das Eigentum des Benutzers „wwwrun“ und ändere entsprechend die Gruppenzugehörigkeit in „www“. Damit ist sichergestellt, dass WordPress im verzeichnis1 schreiben darf.
Anwendung des WordPress Plugins
Dazu verweise ich wieder auf den Autor des Plugins. Dort ist hinreichend Beschrieben, wie mit dem Plugin zu verfahren ist.
Ich hoffe, ich konnte helfen…