인덱스 페이지가 404를 반환하도록 하는 하위 디렉터리의 NGINX 위치 블록

인덱스 페이지가 404를 반환하도록 하는 하위 디렉터리의 NGINX 위치 블록

기본적인 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.

관련 정보