NGINX 子目录位置阻止导致索引页返回 404

NGINX 子目录位置阻止导致索引页返回 404

刚刚学习了基本的 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

相关内容