NGINX 子目錄位置區塊導致索引頁返回 404

NGINX 子目錄位置區塊導致索引頁返回 404

剛學會基本的 NGINX。我正在嘗試重寫一些乾淨的 URL,以便它們重定向到伺服器上稱為視圖的子目錄中的檔案。

下面的配置可以實現這一點。但是,每當我返回索引頁時,它都會返回 404 錯誤。

正如您將在下面看到的,我將索引定義為index.html。我認為這將確保 index.html 被視為索引檔。然而,NGINX 似乎選擇使用第一個位置區塊來確定索引。這是有道理的,因為“/”是索引。但是,我嘗試僅將第一個位置區塊用於後續頁面(即 nginx-practice.test/secondpage)

這是設定檔:

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;

}

如何讓 NGINX 使用 index.html 作為索引頁,然後對所有後續頁面使用重寫?

答案1

您可以location = / {}僅將index.html 檔案用於主頁,然後使用通用location / {}區塊來定位後續頁面。這是一個例子...

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;

}

正如您所看到的,該location @htmlext {}區塊也可以被消除。

在我的範例中,我使用了/user/robertguttersohn/Sites/nginx-practice/public根目錄和/user/robertguttersohn/Sites/nginx-practice/public/views子目錄。您可能需要更新它以適應您的環境。請記住在對配置進行任何更改後重新啟動 Nginx 伺服器。

有關位置工作原理的更多信息,請查看https://nginx.org/r/location

相關內容