Bloco de localização NGINX para subdiretório fazendo com que a página de índice retorne 404

Bloco de localização NGINX para subdiretório fazendo com que a página de índice retorne 404

Apenas aprendendo NGINX básico. Estou tentando reescrever alguns URLS limpos para que eles redirecionem para arquivos em um subdiretório chamado no servidor chamado visualizações.

A configuração abaixo faz isso. Porém, sempre que retorno à página de índice, ela retorna um erro 404.

Como você verá abaixo, defino meu índice como index.html. Presumi que isso garantiria que index.html fosse tratado como o arquivo de índice. No entanto, parece que o NGINX está optando por usar o primeiro bloco de localização para determinar o índice. Isso faz sentido porque '/' é o índice. No entanto, estou tentando usar apenas esse primeiro bloco de localização para páginas subsequentes (ou seja, nginx-practice.test/secondpage)

Aqui está o arquivo de configuração:

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;

}

Como faço para que o NGINX use index.html para a página de índice e, em seguida, use a reescrita para todas as páginas subsequentes?

Responder1

Você pode usar location = / {}o arquivo index.html para direcionar apenas para a página inicial e, em seguida, usar o location / {}bloco genérico para direcionar as páginas subsequentes. Aqui está um exemplo...

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;

}

Como você pode ver, o location @htmlext {}bloqueio também pode ser eliminado.

No meu exemplo, usei /user/robertguttersohn/Sites/nginx-practice/publiccomo diretório raiz e /user/robertguttersohn/Sites/nginx-practice/public/viewscomo subdiretório. Você pode querer atualizá-lo para se adequar ao seu ambiente. Lembre-se de reiniciar o servidor Nginx após fazer qualquer alteração na configuração.

Para obter mais informações sobre como funciona a localização, confirahttps://nginx.org/r/location.

informação relacionada