it-swarm.com.de

Zu viele Weiterleitungen aufgrund des Zugriffscodes

TL; DR: Was macht die folgende Codezeile? Entfernt es abschließende Schrägstriche von einer URL?

    RewriteRule ^(.*)/$ http://%{HTTP_Host}/$1 [R=301,L]

Ich habe eine Drupal Site mit wenig Wissen über die Funktionsweise von htaccess-Dateien geerbt.

Wir haben einen Ordner, nennen wir ihn "Kultur" in unserem Dokumentenstamm. Im Kulturordner haben wir eine index.html-Datei. Das ist also docroot/culture/index.html.

Wenn ich in meinem Browser versuche, zu www.meinname.de/kultur zu wechseln, erhalte ich eine unendliche Weiterleitung. Nach der Verwendung eines Online-Redirect-Checkers stellte ich fest, dass Folgendes passiert:

http://www.mysitename.com/culture/ 301 dauerhaft verschoben http://www.mysitename.com/culture 301 dauerhaft verschoben ...

Der abschließende Schrägstrich (hier das echte Monster) wird 19-mal hin und her hinzugefügt und entfernt, und genau das sagt der Fehler:

Zu viele Weiterleitungen. Bitte versuchen Sie, die Anzahl der Weiterleitungen zu verringern. Eigentlich benutzt du 19 Redirects. Idealerweise sollten Sie nicht mehr als 3 Redirects in einer Redirect-Kette verwenden. Bei mehr als drei Umleitungen wird der Server unnötig belastet und die Geschwindigkeit verringert, was zu einer schlechten Benutzererfahrung führt.

Leider glaube ich, dass es sich bei dem Problem um die folgende Codezeile handelt:

RewriteRule ^(.*)/$ http://%{HTTP_Host}/$1 [R=301,L]

Ich kommentiere diese Codezeile und die Weiterleitung findet nicht mehr statt. In den Kommentaren zu htaccess heißt es jedoch, dass diese von mir auskommentierte Zeile verwendet wird, um abschließende Schrägstriche auf unseren Seiten zu entfernen - obwohl die abschließenden Schrägstriche ohne sie immer noch entfernt werden.

Irgendwelche Gedanken darüber, was diese Codezeile macht?

4
SuperTony

RewriteRule ^(.*)/$ http://%{HTTP_Host}/$1 [R=301,L]

Ja, diese Zeile entfernt einen abschließenden Schrägstrich aus der URL. Sie benötigen jedoch ein Bedingung davor, um eine Wiederbeschreibungsschleife zu verhindern, wenn mod_dir (DirectorySlash) aktiv ist und Sie ein Dateisystemverzeichnis anfordern.

Und das ist wahrscheinlich das Problem hier. Wenn Sie /directory anfordern, wobei "directory" ein aktuelles Verzeichnis im Dateisystem ist, hängt mod_dir (insbesondere die Anweisung DirectorySlash) den abschließenden Schrägstrich automatisch an, um den Fehler zu beheben URL.

Also fordern Sie /directory/ an, Ihr RewriteRule entfernt den abschließenden Schrägstrich und mod_dir fügt ihn zurück usw.

Wenn Sie jedoch buchstäblich auf index.html (das DirectoryIndex) im Dateisystem in diesem Verzeichnis zugreifen und kein anderes Routing ausgeführt wird, müssen Sie erforderlich den abschließenden Schrägstrich auf dem URL. So wäre es nützlich, zu verhindern, dass Verzeichnisse von ihren Schrägstrichen befreit werden, zum Beispiel:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ http://%{HTTP_Host}/$1 [R=301,L]

Wenn es ohne funktioniert, gehe ich davon aus, dass ein anderes Umschreiben stattfindet oder Drupal die Anfrage weiterleitet.

obwohl die abschließenden Schrägstriche ohne es noch entfernt werden.

Vielleicht ist das doch nicht nötig !? Es ist schwer sicher zu sagen, ohne den Rest Ihrer .htaccess-Datei zu sehen.

Stellen Sie außerdem sicher, dass keine zwischengespeicherte Antwort angezeigt wird. 301 (permanente) Weiterleitungen werden natürlich vom Browser zwischengespeichert.

3
MrWhite