nginx : rewrite Regel zu entfernen /index.html aus die $request_uri
Ich habe gesehen, ein paar Möglichkeiten zu schreiben, die $request_uri
und fügen Sie den index.html
es, wenn die betreffende Datei existiert im Dateisystem, etwa so:
if (-f $request_filename/index.html) {
rewrite (.*) $1/index.html break;
}
aber ich Frage mich, ob das gegenüber erreichbar ist:
d.h. wenn jemand fordert http://example.com/index.html
sind Sie umgeleitet http://example.com
Weil die nginx-perl-regexp ist kompatibel, ich habe versucht, so etwas wie dieses:
if ( $request_uri ~* "index\.html$" ) {
set $new_uri $request_uri ~* s/index\.html//
rewrite $1 permanent;
}
aber war es meist ein Rätselraten, gibt es eine gute Dokumentation zur Beschreibung der modrewrite für nginx ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwende ich folgende rewrite in der top-level-server-Klausel:
Mit diesem alleine funktioniert bei den meisten URLs, wie
http://foo.com/bar/index.html
, aber es brichthttp://foo.com/index.html
. Um dies zu beheben, habe ich folgende zusätzliche Regel:Den
=404
Teil gibt einen 404-Fehler, wenn die Datei nicht gefunden wird.Ich habe keine Ahnung, warum die erste rewrite allein ist nicht ausreichend.
Folgende config erlaubt mir umleiten
/index.html
zu/
und/subdir/index.html
zu/subdir/
:Für die root -
/index.html
, die Antwort von Nicolas führte in eine redirect-Schleife, so ich musste nach anderen Antworten.Diese Frage wurde auf der nginx-Foren und die Antwort dort besser funktionierte.
http://forum.nginx.org/read.php?2,217899,217915
Entweder
oder
Aus irgendeinem Grund die meisten Lösungen, die hier erwähnt funktionierte nicht. Diejenigen, die arbeiteten, gab mir Fehler mit fehlenden /in der url. Diese Lösung funktioniert für mich.
Fügen Sie in Ihrem location-Direktive.
Dies ist für mich arbeiten:
Es umfasst sowohl die root-Instanz
/index.html
und unteren Instanzen/bar/index.html
Den ersten Teil der regex im Grunde übersetzt:
[nothing]
oder/[something]
- im ersten Fall $2 ist eine leere Zeichenfolge, so dass Sie umleiten, um nur/
im zweiten Fall $2 ist[something]
so umleiten Sie zu/[something]
Ich ging eigentlich ein bisschen schicker zu decken
index.html
,index.htm
, undindex.php
Funktioniert:
Lösungen zu zitieren
$scheme://domain.com/
davon ausgehen, dass die Domäne ist hart codiert. Es war nicht mein Fall und so habe ich:/
Seite im relative Mode. So wurde ich also überantwortet die Bezugnahme auf ein absolutes fashion-und zu diesem Zweck haben wir zu geben, das komplette Schema und host-name (domain-name). Dieser hack ermöglicht es uns, finden Sie auf den domain-Namen ohne hart-codieren. Ich fand es besonders nützlich sein, da war ich entwickeln und arbeiten mit separaten staging-und Gast (virtuelle Maschine) Versionen der Website.