NGINX-Standortblock für Unterverzeichnis führt dazu, dass die Indexseite 404 zurückgibt

NGINX-Standortblock für Unterverzeichnis führt dazu, dass die Indexseite 404 zurückgibt

Ich lerne gerade die Grundlagen von NGINX. Ich versuche, einige saubere URLs so umzuschreiben, dass sie auf Dateien in einem Unterverzeichnis namens „Views“ auf dem Server umleiten.

Die folgende Konfiguration erreicht dies. Wenn ich jedoch zur Indexseite zurückkehre, wird ein 404-Fehler zurückgegeben.

Wie Sie unten sehen, definiere ich meinen Index als index.html. Ich ging davon aus, dass dies sicherstellen würde, dass index.html als Indexdatei behandelt wird. Es scheint jedoch, dass NGINX sich dafür entscheidet, den ersten Standortblock zur Bestimmung des Index zu verwenden. Das macht Sinn, da „/“ der Index ist. Ich versuche jedoch, diesen ersten Standortblock nur für nachfolgende Seiten zu verwenden (z. B. nginx-practice.test/secondpage).

Hier ist die Konfigurationsdatei:

server {
    listen 127.0.0.1:80;
    server_name nginx-practice.test;
    root /usr/robertguttersohn/Sites/nginx-practice/public;

    index index.html;

    location ~ /. {
        root /user/Sites/nginx-practice/public/views;
        try_files $uri @htmlext =404;
    }

    location @htmlext {
        rewrite ^(.*)$ $1.html last;
    } 

    access_log /usr/local/var/log/nginx/access.log;
    error_log /usr/local/var/log/nginx/error.log;

}

Wie kann ich NGINX dazu bringen, index.html für die Indexseite zu verwenden und dann die Neuschreibung für alle nachfolgenden Seiten zu verwenden?

Antwort1

Sie könnten location = / {}die Datei index.html nur für die Startseite verwenden und dann den generischen location / {}Block verwenden, um die nachfolgenden Seiten anzusprechen. Hier ist ein Beispiel ...

server {
    listen 127.0.0.1:80;
    server_name nginx-practice.test;
    root /user/robertguttersohn/Sites/nginx-practice/public;

    index index.html;

    # To isolate home page
    location = / { try_files /index.html =404; }

    # To parse subsequent pages
    location / {
        root /user/robertguttersohn/Sites/nginx-practice/public/views;
        try_files $uri @url.html =404;
    }

    access_log /usr/local/var/log/nginx/access.log;
    error_log /usr/local/var/log/nginx/error.log;

}

Wie Sie sehen, location @htmlext {}kann die Blockade auch beseitigt werden.

/user/robertguttersohn/Sites/nginx-practice/publicIn meinem Beispiel habe ich als Stammverzeichnis und als Unterverzeichnis verwendet /user/robertguttersohn/Sites/nginx-practice/public/views. Möglicherweise möchten Sie es aktualisieren, damit es zu Ihrer Umgebung passt. Denken Sie daran, den Nginx-Server nach jeder Konfigurationsänderung neu zu starten.

Weitere Informationen zur Standortbestimmung finden Sie unterhttps://nginx.org/r/location.

verwandte Informationen