サブディレクトリの 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

関連情報