Bloque de ubicación NGINX para el subdirectorio que hace que la página de índice devuelva 404

Bloque de ubicación NGINX para el subdirectorio que hace que la página de índice devuelva 404

Recién estoy aprendiendo NGINX básico. Estoy intentando reescribir algunas URL limpias para que redirijan a archivos en un subdirectorio llamado en el servidor llamado vistas.

La siguiente configuración logra esto. Sin embargo, cada vez que vuelvo a la página de índice, devuelve un error 404.

Como verá a continuación, defino mi índice como index.html. Supuse que esto garantizaría que index.html fuera tratado como el archivo de índice. Sin embargo, parece que NGINX opta por utilizar el primer bloque de ubicación para determinar el índice. Eso tiene sentido porque '/' es el índice. Sin embargo, estoy intentando usar solo ese primer bloque de ubicación para páginas posteriores (es decir, nginx-practice.test/segunda página)

Aquí está el archivo de configuración:

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;

}

¿Cómo hago para que NGINX use index.html para la página de índice y luego use la reescritura para todas las páginas posteriores?

Respuesta1

Puede utilizar location = / {}el archivo index.html como destino solo para la página de inicio y luego usar el location / {}bloque genérico para apuntar a las páginas siguientes. Aquí tienes un ejemplo...

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 puedes ver, el location @htmlext {}bloqueo también se puede eliminar.

En mi ejemplo, lo he usado /user/robertguttersohn/Sites/nginx-practice/publiccomo directorio raíz y /user/robertguttersohn/Sites/nginx-practice/public/viewscomo subdirectorio. Es posible que desee actualizarlo para adaptarlo a su entorno. Recuerde reiniciar el servidor Nginx después de realizar cualquier cambio en la configuración.

Para obtener más información sobre cómo funciona la ubicación, consultehttps://nginx.org/r/location.

información relacionada