HTML-Dateierweiterungen mit Nginx-Umschreibungen ausblenden

16

Ich richte eine statische Site über Nginx ein und möchte URLs ersetzen, die wie folgt aussehen:

http://foo.com/bar.html

mit

http://foo.com/bar

Der Schlüssel ist kein abschließender Schrägstrich. Ich mache derzeit etwas Ähnliches mit Location-Aliasen, aber das ist mühsam, weil es einen Location-Block für jede Datei erfordert und einen abschließenden Schrägstrich anfügt, da nginx Aliase als Verzeichnisse ansieht:

    location / {
        root    /srv/www/foo/public_html;
        index   index.html;
    }

    location /bar1 {
        alias /srv/www/foo/public_html/;
        index bar1.html;
    }

    location /bar2 {
        alias /srv/www/foo/public_html/;
        index bar2.html;
    }

Und so weiter. Ich habe die Dokumentation über das Neuschreiben durchgelesen und kann scheinbar nicht zusammenfassen, was gesagt wird, um das zu tun, was ich es brauche. Ich komme nicht aus einem Apache-Hintergrund. nginx ist mein erster Einstieg in Webserver. Ich bin mir sicher, dass ich etwas Offensichtliches verpasse, da mein HTTP-Hintergrund schwach ist. Vielen Dank im Voraus für jede Hilfe, die Sie leisten können.

Doug Stephen
quelle

Antworten:

17

try_files sollte sein was du willst.

Etwas wie das:

try_files $uri.html $uri $uri/ =404;
Shane Madden
quelle
1
Dies funktionierte mit der geringfügigen Ausnahme, dass $ uri.html eine 500 verursachte. Ich musste "$ {uri} .html" verwenden.
Doug Stephen
4
Eine Änderung in try_files $uri.html $uri/ =404;wäre SEO-bezogen besser, da nicht zwei URLs foobar.com/bar und foobar.com/bar.html auf dieselbe Ressource verweisen.
Khaja Minhajuddin
5

Laut dem Kommentar von @Khaja ist die beste Antwort:

try_files $uri.html $uri/ =404;

Damit wird nur eine Kopie der Ressource bereitgestellt (die ohne die Erweiterung .html). Sie möchten Ihre Linkstärke nicht auf mehrere URLs aufteilen, die doppelten Inhalt enthalten. Hier finden Sie die Dokumentation hier .

Bryce
quelle
Ich habe es versucht. try_files $ uri.html $ uri / = 404; es brach Laden der Homepage ohne myurl / index auch pleite Laden von CSS- zu nominieren, Js etc
aspiringGuru