刚刚学习了基本的 NGINX。我正在尝试重写一些干净的 URL,以便它们重定向到服务器上名为 views 的子目录中的文件。
下面的配置实现了这一点。但是,每当我返回索引页时,它都会返回 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。