Ich habe diese Weiterleitung (301) nicht wirklich bemerkt, als ich eine URL wie diese ohne Schrägstrich ("/") am Ende anforderte: http://server/directory
Der Server antwortet mit einem permanenten 301-Redirect-Header und einem Location-Header, der sich in befindet http://server/directory/
.
Sehen Sie sich dieses Live-Beispiel an:
Benutzeranfrage:
GET /social HTTP/1.1
( http://192.168.1.111/social )
Apache Server-Antwort:
HTTP/1.1 301 Moved Permanently
Location: http://192.168.1.111/social/
Benutzeranfrage:
GET /social/ HTTP/1.1
( http://192.168.1.111/social/ )
Apache Server-Antwort:
HTTP/1.1 200 OK
Apache access.log:
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social HTTP/1.1" 301 558 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
-
192.168.1.130 - - [05/Apr/2014:22:06:47 +0200] "GET /social/ HTTP/1.1" 200 942 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:27.0) Gecko/20100101 Firefox/27.0"
Das Verzeichnis / social / enthält eine index.html
Datei.
Apache Software: Apache/2.2.22 (Ubuntu)
Verzeichnisoptionen:Options Indexes FollowSymLinks MultiViews
Meine Frage lautet also: Warum macht Apache das? Und wie kann man die Weiterleitung verhindern und index.html
direkt versenden ? Kunden müssen zwei Anfragen senden, was wirklich unnötig ist. Und vielleicht erlauben einige der Clients keine Weiterleitungen und können die Site nicht ohne den abschließenden Schrägstrich ("/") aufrufen.
Ich möchte die Umleitung nicht deaktivieren. Ich möchte nicht, dass der Server die Antwort direkt ohne Weiterleitung sendet. Auch bei Aufforderung /social
.
Ist Apache darauf ausgelegt, diese Anfragen umzuleiten? Der Server könnte die Daten einfach ohne Umleitung senden, oder? Soll ich die verwenden mod_rewrite
, um dies zu verhindern? Oder eine andere Konfiguration? Oder sollte ich es einfach so lassen und am Ende aller HTML-Links einen Schrägstrich einfügen und mit einigen Weiterleitungen leben?
Was denkt ihr?
/social
in Ihrem Beispiel mit 404 zu antworten .index.html
ohne Weiterleitung/social
. (Außerdem ist es im Allgemeinen nicht erwünscht, denselben Inhalt an mehreren URLs bereitzustellen.)Antworten:
Wenn Sie die Daten ohne Weiterleitung senden, werden relative Links unterbrochen. Wenn
http://server/directory
enthältfile
, dann wäre die vollständige URL dafürhttp://server/directory/file
. Ein wie angegebener Link<a href="file">
zeigt an,http://server/directory/file
ob die Basis-URL isthttp://server/directory/
, aber wenn die Basis-URL nur warhttp://server/directory
, würde erhttp://server/file
stattdessen auf zeigen, was nicht das beabsichtigte Ergebnis ist.Apache könnte die Verzeichnisliste abhängig von der URL auf zwei verschiedene Arten generiert haben, anstatt sie umzuleiten. Dies würde jedoch nicht funktionieren, wenn sich eine
index.html
Datei im Verzeichnis befindet. Also verwendet Apache stattdessen den Ansatz, der in beiden Fällen funktioniert.Dies ist kein neues Verhalten, vor einem Jahrzehnt verhielt sich Apache genauso. Clients, die eine Umleitung nicht verarbeiten können, sollten jetzt behoben sein. Aber für alle Clients, die keine Umleitung verarbeiten können, sollte Apache eine winzige HTML-Datei mit einem Link senden, dem stattdessen gefolgt werden kann.
quelle
mod_dir
Fügt diese Umleitung hinzu und Sie können sie mit einerDirectorySlash Off
Direktive deaktivieren .Beachten Sie jedoch, dass das Deaktivieren der Umleitung mit abschließendem Schrägstrich dazu führen kann, dass einige Seiten beschädigt werden. Wenn die zurückgegebene Seite relative Links enthält, werden diese URLs anders aufgelöst, wenn die Seite ohne den abschließenden Schrägstrich geliefert wird.
quelle