プレフィックスで始まらないすべての URL を指定されたプレフィックスにリダイレクトする最適な方法は何ですか

プレフィックスで始まらないすべての URL を指定されたプレフィックスにリダイレクトする最適な方法は何ですか

すべてのURLをリダイレクトしたいのですがしないでくださいサーバーが を使用することを考慮して、プレフィックス/abcd/to ->で始まります。/abcd/proxy_pass

server {
        location / {

                proxy_pass http://upstream-server/;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;

                if ($request_uri = "/"){
                        return 301 /abcd/;
                }
        }
}

次のような正規表現と否定を使用することを考えます:

location ~ ^/(?!abcd.*).*$ {
          return 301 /abcd/;
}

他に/より良い解決策はありますか?

答え1

それは必要以上に複雑だと思います。Nginx評価する最も具体的なブロックから最も具体的でないブロックまで。

この例では、/abcd に一致するものはすべて proxy_pass ブロックに送られ、それ以外はすべてリダイレクトされる / ブロックに送られます。

まだテストしていませんが、試してみて、うまくいかなければ、もう少し考えます。

location /abcd {
     proxy_pass (etc);
}

location / {
      return 301 /abcd/;
}

関連情報