將所有不以前綴開頭的網址重新導向到給定前綴的最佳方法是什麼

將所有不以前綴開頭的網址重新導向到給定前綴的最佳方法是什麼

我想重定向所有的網址不要考慮到伺服器使用. ,/abcd/以 ->前綴開頭。/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/;
}

相關內容