剛學會基本的 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。