Probleme mit sauberen URLs in Drupal 8 beheben
Grundlagen
In Drupal 8 sind saubere URLs standardmäßig aktiviert und können nicht deaktiviert werden. Allerdings muss das Rewrite-Modul auf Ihrem Webserver installiert sein.
Überprüfen Sie die Adresszeile Ihres Browsers. Die URLs Ihrer Seite sollten kein ?q=
in der URL enthalten.
Beispiel für korrekte „saubere URLs“
http://www.example.com/node/83
Beispiel für „saubere URLs“, die nicht funktionieren
http://www.example.com/?q=node/83
Es gibt weitere Anleitungen zur Einrichtung sauberer URLs für verschiedene Systeme wie Apache, WAMP, XAMPP und IIS.
Serverkonfiguration für saubere URLs
Sie können mehr über die Anforderungen an Webserver lesen.
Serverkonfiguration für saubere URLs auf einem dedizierten Server mit httpd.conf
Die Aktivierung sauberer URLs auf einem dedizierten Server umfasst folgende Schritte:
1. Aktivieren Sie mod_rewrite für Apache. Fragen Sie Ihren Webhoster oder konsultieren Sie die Apache-Dokumentation zu mod_rewrite für weitere Informationen. Mindestens müssen Sie sicherstellen, dass mod_rewrite für Ihre Apache-Installation aktiviert ist.
Um zu prüfen, ob mod_rewrite in Apache2 verfügbar ist, können Sie in der Kommandozeile den folgenden Befehl eingeben, um alle geladenen Apache-Module anzuzeigen:
apache2ctl -M
Auf manchen Systemen kann der Befehl auch lauten:
apachectl -M
oder
httpd -M
2. Prüfen Sie in der Ausgabe, ob rewrite_module
in der Modulliste enthalten ist.
Wenn das Rewrite-Modul nicht aufgeführt ist, muss es entweder kompiliert oder als ladbares Modul verfügbar gemacht werden. In der Regel können Sie Apache anweisen, das Modul zu laden, indem Sie folgende Zeilen in Ihre Apache-Konfigurationsdatei einfügen:
LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c
Kommentieren Sie die Zeile AddModule mod_rewrite.c
aus, falls diese in Ihrer Konfigurationsdatei vorhanden aber auskommentiert ist. Folgendes kann funktionieren, um das Modul zu aktivieren, ohne Dateien zu bearbeiten:
a2enmod rewrite
Beachten Sie, dass diese Vorgehensweisen je nach Betriebssystem- und Apache-Version unterschiedlich sein können – konsultieren Sie die Ihrer Apache-Installation beiliegende Dokumentation für korrekten Syntax.
Vergessen Sie nicht, Apache neu zu starten, damit die Änderungen wirksam werden: Apache neu starten.
3. Finden Sie die passende Apache-Konfigurationsdatei für Ihre Website. Abhängig von Ihrer Serverkonfiguration kann dies httpd.conf, eine spezifische Virtual-Host-Datei (z. B. vhost.conf), eine sitespezifische Datei (z. B. default) oder apache2.conf sein. Üblicherweise befinden sich diese Dateien unter /etc/httpd/conf, /etc/apache2 oder einem Unterverzeichnis. Falls nicht, können Sie suchen mit:
find /etc -name httpd* oder find /etc -name apache2*
um die Datei an einem anderen Ort auf Ihrem Dateisystem zu finden.
Wenn Sie keine Schreibrechte für diese Dateien besitzen und saubere URLs nicht funktionieren, müssen Sie möglicherweise Ihren Systemadministrator oder Hosting-Provider um Hilfe bitten. Sie können jedoch diese Konfigurationsdateien lesen, um erste Fehlerbehebungen durchzuführen.
4. Fügen Sie die Drupal-spezifischen Einstellungen in die Konfigurationsdatei ein oder binden Sie sie ein. Hier finden Sie Anleitungen zum Einfügen der Drupal-Direktiven in die Konfigurationsdatei. Schauen Sie sich die .htaccess-Datei in Drupal für Beispiele an, wie diese Regeln für Drupal 8 aussehen:
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^ index.php [L]
Oder dieses Beispiel für Debian 8 + Apache2 + ISPConfig mit Wildcard für alle installierten Websites:
<Directory /var/www/clients/*/*/web/> RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
Stellen Sie sicher, dass Sie die .htaccess-Datei Ihrer verwendeten Drupal-Hauptversion (z. B. 8.x) prüfen.
Hinweis: Wenn Sie die Rewrite-Regeln nicht in der Apache-Konfiguration ablegen möchten, können Sie weiterhin die Drupal .htaccess-Datei verwenden (wie bei Shared Hosting). Sie müssen dann die Direktive AllowOverride
in der Apache-Konfiguration setzen (erlaubt lokale .htaccess-Overrides):
AllowOverride All AccessFileName .htaccess
Lesen Sie „Hinter den Kulissen“ mit Apache .htaccess für eine detaillierte Erklärung von .htaccess. Es kann auch hilfreich sein, sich Beispiele der Apache 2 AllowOverride Direktiven anzuschauen.
Hinweis zu MultiViews: Apache unterstützt eine Funktion namens „MultiViews“ (allgemeiner „Content Negotiation“), die den Zugriff auf Ihre Seiten ermöglicht, ohne Dateierweiterungen anzugeben. Zum Beispiel könnte eine Datei „valuation.txt“ über die URL „example.com/evaluation“ erreichbar sein. Obwohl MultiViews praktisch sein können, wenn bewusst eingesetzt, können sie Probleme verursachen, wenn Drupal saubere URLs aktiviert hat. Wenn Sie nicht genau wissen, was Sie tun, sollten Sie MultiViews nicht verwenden, wenn Sie saubere Drupal URLs nutzen wollen. MultiViews ist standardmäßig in Apache nicht aktiviert, daher betrifft Sie das wahrscheinlich nicht. Weitere Informationen finden Sie in der Apache-Dokumentation zu MultiViews.
Serverkonfiguration für saubere URLs auf Shared Hosting mit .htaccess
Eine Standard-Drupal-Installation enthält eine Beispiel-.htaccess-Datei, die für saubere URLs ausreicht. Das Kopieren dieser Datei wird häufig übersehen, da sie mit einem führenden Punkt beginnt. Stellen Sie also sicher, dass diese Datei in Ihrer Drupal-Installation vorhanden ist, bevor Sie saubere URLs aktivieren.
Überprüfen Sie dies im Terminal mit ls -a
, um auch Dateien mit führendem Punkt anzuzeigen.
Wenn die Datei vorhanden ist, saubere URLs aber trotzdem nicht funktionieren, können Sie einige der untenstehenden Tipps zur Fehlerbehebung ausprobieren. Wenn Sie weiterhin Probleme haben, wenden Sie sich an Ihren Hosting-Provider.
Fehlerbehebung
Prüfen Sie, ob .htaccess verwendet wird
Apache muss ausdrücklich angewiesen werden, die Anweisungen in Ihrer .htaccess-Datei zu beachten. Standardmäßig ist dies deaktiviert, obwohl die meisten Hoster es aktivieren. Die oben genannte Direktive AllowOverride All sorgt dafür, dass .htaccess aktiviert wird.
Um zu prüfen, ob Ihr Hoster .htaccess liest, können Sie testweise eine fehlerhafte Zeile in die Datei schreiben, um die Funktion zu brechen. Ihre Website sollte dann sofort einen „500 Serverfehler“ beim Laden der Seite aus diesem Verzeichnis anzeigen. Entfernen Sie die fehlerhafte Zeile sofort wieder.
Wenn Ihre Seite nicht abstürzt, wird .htaccess ignoriert, und Sie können keine sauberen URLs verwenden, bis Ihr Hoster die Funktionalität aktiviert oder Sie mod_rewrite in der httpd.conf aktivieren (siehe oben). Einige Hoster erlauben das Aktivieren über ihr Kontrollpanel – schauen Sie dort zuerst nach.
RewriteBase konfigurieren
Eine der wichtigsten Einstellungen, die Sie eventuell anpassen müssen, ist RewriteBase. Diese Einstellung findet sich entweder in der Drupal .htaccess oder in der httpd.conf, je nachdem, wo Sie die Rewrite-Regeln einfügen (siehe oben). Standardmäßig ist RewriteBase in der Drupal .htaccess auskommentiert und funktioniert in vielen Setups gut.
Bei Problemen mit sauberen URLs müssen Sie RewriteBase eventuell anpassen. Wenn z. B. Ihr Apache DocumentRoot /var/www/ ist (d. h. /var/www/index.html wird geladen, wenn Sie http://www.example.com/ aufrufen) und Ihre Drupal-Installation im Unterordner /var/www/mysite/ liegt, setzen Sie RewriteBase auf:
RewriteBase /mysite
Das kann helfen. In einigen Fällen funktioniert auch
RewriteBase /
um saubere URLs zu ermöglichen.
$base_url
Eventuell müssen Sie die Variable $base_url
in settings.php manuell setzen, falls sie nicht gesetzt ist. Bekannt ist, dass Server mit FastCGI Probleme haben können, wenn $base_url auskommentiert bleibt (siehe http://bugs.php.net/bug.php?id=19656).
Multi-Site
RewriteBase funktioniert, wenn Ihre Drupal-Installation nur eine Site bedient oder wenn alle Sites im gleichen Unterordner ihrer Domains liegen. Zum Beispiel:
RewriteBase /
funktioniert für folgende Sites:
http://www.example.com/
http://www.example2.com/
http://www.example3.com/
RewriteBase /mysite
funktioniert für folgende Sites:
http://www.example.com/mysite
http://www.example2.com/mysite
http://www.example3.com/mysite
Wenn Ihre Sites jedoch in verschiedenen Unterordnern liegen, funktioniert RewriteBase nicht. Sie müssen eine eigene Regel für jeden Unterordner anlegen. Zum Beispiel könnte Ihre Drupal-Installation folgende Sites bedienen:
http://www.example.com/
http://www.example.com/mysite
Um saubere URLs für beide Sites zu aktivieren, fügen Sie vor den bestehenden Rewrite-Regeln Folgendes hinzu:
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} ^/mysite/ RewriteRule ^ /mysite/index.php [L]
Standort der index.php
Für einige Serverkonfigurationen ist eventuell eine Anpassung der Drupal .htaccess nötig. Suchen Sie am Ende Ihrer Drupal .htaccess nach einer Zeile wie dieser:
RewriteRule ^ index.php [L]
Sie müssen index.php eventuell durch den URL-Pfad zu Ihrer Drupal-Installation ersetzen (nur der Teil hinter der Basis-URL). Wenn z. B. die Startseite Ihres Sites http://example.com/subdir/
ist, müssen Sie /subdir/index.php statt index.php verwenden. Bei http://example.com/
reicht /index.php. Das ist für manche, aber nicht alle Serverkonfigurationen notwendig.
Erstellung sauberer URLs mit dem Path-Modul
Saubere URLs bewirken, dass Drupal URLs in der Form "http://www.example.com/node/83" generiert. Um den Teil „node/##“ in URLs wie „news/june-1st-news“ umzuwandeln, muss das Path-Modul aktiviert werden. Weitere Informationen finden Sie auf der Path-Modul-Anleitungsseite.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.