it-swarm.com.de

nginx: Sende alle Anfragen an eine einzige HTML-Seite

Mit Nginx möchte ich die URL beibehalten, aber die gleiche Seite laden, egal was passiert. Ich werde die URL mit History.getState() verwenden, um die Anfragen in meiner Javascript-App weiterzuleiten. Wie es scheint, sollte es eine einfache Sache sein, zu tun?

location / {
    rewrite (.*) base.html break;
}

funktioniert, leitet aber die URL um? Ich brauche immer noch die URL, ich möchte nur immer die gleiche Seite verwenden.

142

Ich denke, das wird es für Sie tun:

location / {
    try_files /base.html =404;
}
178
Alex Howansky

Mit nur try_files hat bei mir nicht funktioniert - es hat einen Überschreib- oder internen Umleitungszyklusfehler in meinen Protokollen verursacht.

Die Nginx-Dokumente enthielten einige zusätzliche Details:

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

Also habe ich Folgendes verwendet:

root /var/www/mysite;

location / {
    try_files $uri /base.html;
}

location = /base.html {
    expires 30s;
}
24
Kevan Stannard

Ihre ursprüngliche Neufassung sollte fast funktionieren. Ich bin nicht sicher, warum es umgeleitet wird, aber ich denke, was Sie wirklich wollen, ist einfach

rewrite ^ /base.html break;

Sie sollten dies an einem Ort oder direkt auf dem Server tun können.

16
kolbyjack

Das hat bei mir funktioniert:

location / {
    alias /path/to/my/indexfile/;
    try_files $uri /index.html;
}

Dadurch konnte ich eine Catch-All-URL für eine JavaScript-App für eine einzelne Seite erstellen. Alle statischen Dateien wie CSS, Schriftarten und Javascript von npm run build wird gefunden, wenn sie sich im selben Verzeichnis befinden wie index.html.

Wenn sich die statischen Dateien aus irgendeinem Grund in einem anderen Verzeichnis befinden, benötigen Sie außerdem Folgendes:

# Static pages generated by "npm run build"
location ~ ^/css/|^/fonts/|^/semantic/|^/static/ {
    alias /path/to/my/staticfiles/;
}
11
Mark Chackerian

Der richtige Weg wäre:

location / {
    rewrite (.*) base.html last;
}

Mit last findet nginx einen neuen geeigneten location Block entsprechend dem Ergebnis des Umschreibens.

try_files ist auch eine absolut gültige Herangehensweise an dieses Problem.

7
Etherealone

Das hat bei mir funktioniert:

location / {
    try_files $uri $uri/ /base.html;
}
4
Abhishek