Блокировка расположения 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.

Связанный контент