2017-01-12 21 views
2

Ich habe ein Dutzend überarbeitete Fragen gelesen. Die meisten Fragen sind für .php, aber ich habe einfach .html-Dateien so über => about.html .Aber ich nicht in der Lage bin zu bekommen nginx, dies zu tun:Nginx HTML-Datei umschreiben und folgenden Schrägstrich hinzufügen

  • url akzeptieren mit oder ohne „/“
  • umleiten domain.com/about und domain.com/about/
  • add Schrägstrich an die URL domain.com/about.html so, wenn ich schreibe domain.com/about es domain.com/about/
schreibt

Ich habe mit diesem Code rewrite ^/([a-zA-Z0-9]+)$ /$1.html; versucht, aber es gibt mir 404 Fehler auf URL endend mit "/". Versuchen Sie auch diese rewrite ^([a-zA-Z0-9]+)/?$ $1.html mit demselben Fehler.

Einige schlagen vor, dass ich versuchen sollte, versuchen try_files?

Ich habe versucht, diese auch, die einen 500-Fehler gibt:

location/{ 
rewrite ^(.*)$ /%1 redirect; 
rewrite ^/([^\.]+)$ /$1.html break; 
} 

Ich habe versucht, aus Vorschlag Apache nginx (winginx.com) zu konvertieren here ohne Erfolg.

Dieser Code funktioniert nicht. Ich versuche zu umleiten und folgenden Schrägstrich hinzuzufügen:

if (!-e $request_filename){ 
rewrite ^/(.*)/$ /$1 redirect; 
} 
if (!-e $request_filename){ 
rewrite ^/(.*[^/])$ /$1/ redirect; 
} 

Jeder Vorschlag würde mich glücklich machen.

+0

Die einfachste Lösung wäre, "about.html" in "about/index.html" umzubenennen, dann funktioniert "nginx" ziemlich gut mit dem Indexmodul. –

+1

Das klingt ein wenig übertrieben. Statt einzelner HTML-Dateien müsste ich einen Ordner für jede HTML-Datei erstellen und den Inhalt in eine index.html-Datei in diesen Ordner legen?!? – Asle

Antwort

2

Ich habe diese Konfiguration getestet und es scheint, Ihre Anforderungen (YMMV) zu erfüllen:

root /path/to/root; 

location/{ 
    try_files $uri @rewrite; 
} 
location @rewrite { 
    rewrite ^(.*[^/])$ $1/ permanent; 
    rewrite ^(.*)/$ $1.html break; 
} 

Der erste Standort versucht, die Datei zu dienen als ist, die für die Ressource notwendig ist, Dateien. Sonst wird auf den angegebenen Ort verwiesen.

Der benannte Speicherort leitet alle URIs, die nicht in / enden, permanent um. Andernfalls wird die Datei .html geliefert.

Weitere Informationen finden Sie unter this document und this document.

+0

Hallo, tut mir leid, das funktioniert nicht. Mit dieser Konfiguration bekomme ich eine 404 Seite auf index.html (root). Wenn ich z.B. "projects" zeigt projects.html und die URL ist "http://example.com/projects/", aber alle css und Bilder sind kaputt. Auf der Seite Projekte klicke ich auf den Link *** "über" *** (die Seite ist about.html) und ich bekomme "http://example.com/projects/about/" -> Es sollte " http: // Beispiel.com/about/"und von dort geht es zu" http://example.com/projects/about/about/about/ .... "usw. Also gibt es eine interne Schleife. – Asle

+0

Verwenden relativer Ressourcen Pfad (css & js) wird nicht mit Ihrem Schema funktionieren, da der Browser annimmt, dass das nachgestellte '/' ein Unterverzeichnis ist. Der Link zu 'about.html' sollte wahrscheinlich'/about.html' sein, um '/project/about.html zu vermeiden "Aus dem gleichen Grund. Ich bekomme nicht die interne Schleife - aber es ist ein großes Risiko mit diesen Arten von Schema. –

+0

Ich stimme dem Risiko Richard! Ich schrieb die Pfade auf absolute und die CSS und Bilder arbeiten. Auch hat die Links absolut gemacht. Das hat die falschen URLs behoben. Danke für die Einsicht und das Verständnis, was ich zu lösen versuchte! – Asle

0

Ich denke, ein try_files wäre hier angebracht. Zum Beispiel:

location /about { 
    try_files about.html; 
} 
+0

Funktioniert für about.html, aber ich habe viele Dateien, about.html, contact.html, projects.html, gallery.html etc ... – Asle

+0

Sie können einen Block für jeden erstellen oder eine Regex wie: 'location ~ ^/(. *) /? $ {try_files $ 1.html;} ' –

Verwandte Themen