Bei der Arbeit an einem Projekt bin ich kürzlich auf einen seltsamen Fehler gestoßen. ich stellte fest, dass die Permalinks nicht funktionieren.
Auf “Einfach” gestellt, war alles gut – auf “Beitragsname” (oder was auch immer) gab es den 404 – Fehler.
Das muss ich als erstes überprüfen:
Wenn WordPress benutzerdefinierte Permalinks erstellt, überschreibt es die Standardeinstellungen des Servers in seiner eigenen .htaccess-Datei. Für diejenigen, die nicht wissen, was eine .htaccess-Datei ist, hier eine kurze Definition (Wikipedia):
“.htaccess (englisch hypertext access „Hypertext-Zugriff“) ist eine Konfigurationsdatei auf NCSA-kompatiblen Webservern wie Apache, in der verzeichnisbezogene Regeln aufgestellt werden können.”
In einfachen Worten:
Sie beschreiben in dieser Datei Ihre Serverkonfigurationen. Da WordPress die meisten dieser technischen Dinge ganz von alleine macht, müssen Sie sich im Idealfall nicht darum kümmern, was in dieser Datei steht. Es kann jedoch Situationen geben, in denen WordPress aufgrund von Problemen mit den Zugriffsrechten nicht in der Lage ist, diese Datei zu erstellen/zu ändern. Stellen Sie sicher, dass dies nicht der Fall ist.
Gehen Sie in den WordPress Ordner. In meinem Setup (debian/apache2) gehe ich zu:
/var/www/wordpress
So listen Sie alle Dateiberechtigungen auf:
ls -al
Falls die Datei nicht vorhanden ist, erstellen Sie eine .htaccess-Datei mit:
touch .htaccess
Nun stellen Sie sicher, dass WordPress alle Rechte hat, diese zu ändern. Wenn Sie sich in Ihrem lokalen System befinden, können Sie das bedenkenlos tun:
sudo chmod 777 .htaccess
Um sicherzustellen, dass dies funktioniert, aktivieren Sie wieder auf schöne Permalinks aus WordPress Admin Panel, speichern Sie die Einstellungen und öffnen Sie die .htaccess-Datei. Sie sollte etwas enthalten wie:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Das heißt, WordPress kann sie modifizieren. Prüfen Sie, ob Ihr Problem gelöst ist.
Schritt Zwei
Wenn 404 immer noch Ihre Beiträge heimsucht, bedeutet das, dass das Problem den Rahmen Ihres WordPress-Verzeichnisses sprengt. Wir müssen nun nach Master-Server-Konfigurationen suchen. Sie finden diese in Ihrer httpd.conf Datei.
Hinweis: httpd.conf ist bei einigen Distributionen leer (oder nicht vorhanden).
Das war bei mir der Fall, also können wir stattdessen apache2.conf bearbeiten. Normalerweise findet man diese Datei hier:
/etc/apache2/apache2.conf
Suchen Sie in der conf-Datei nach:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Wie Sie sehen können, ist die AllowOverride-Option auf ‘None’ gesetzt, daher blockiert sie unsere .htaccess-Datei, um die Serverkonfiguration für unsere bestimmte Site zu überschreiben.
Ersetzen Sie ‘None’ durch ‘All’, um dies zu beheben. Die conf-Datei sollte nun so aussehen:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Starten Sie nun den Apache-Server neu:
sudo service apache2 restart
Überprüfen Sie die Links im Browser. Da wir gerade die Hauptkonfigurationsdatei des Servers bearbeitet haben, sollten unsere Links funktionieren.
Immer noch kein Glück gehabt?
Es kann vorkommen, dass Ihr Problem immer noch nicht gelöst ist. Eine Erklärung kann sein, dass diese Master-Konfiguration irgendwo überschrieben wird. Überprüfen Sie den ‘sites-available folder’ innerhalb von apache2.
Hier:/etc/apache2/sites-available
In 000-default.conf die gleichen Änderungen wie oben beschrieben vornehmen, d.h. AllowOverride All setzen.
Starten Sie den Server neu und überprüfen Sie die Links im Browser.
Falls es noch nicht funktioniert, kommen wir zum letzten Punkt, der schief gehen kann. mod_rewrite ist noch nicht aktiviert. Um mod_rewrite für den Apache zu aktivieren, schreiben Sie:
sudo a2enmod rewrite
sudo service apache2 restart
Jetzt die Links checken diese müssen jetzt wirklich funktionieren!