접두사로 시작하지 않는 모든 URL을 주어진 접두사로 리디렉션하는 가장 좋은 방법은 무엇입니까

접두사로 시작하지 않는 모든 URL을 주어진 접두사로 리디렉션하는 가장 좋은 방법은 무엇입니까

나는 모든 URL을 리디렉션하고 싶습니다.하지 마라서버 가 /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

내 생각에는 그것이 필요한 것보다 더 복잡하다고 생각합니다. 엔진스평가하다가장 구체적인 블록부터 가장 덜 구체적인 블록까지.

이 예에서 /abcd와 일치하는 모든 항목은 Proxy_pass 블록으로 이동하고, 다른 모든 항목은 리디렉션되는 / 블록으로 이동합니다.

나는 이것을 테스트하지 않았습니다. 시도해 보고 작동하지 않으면 좀 더 생각해 볼 수 있습니다.

location /abcd {
     proxy_pass (etc);
}

location / {
      return 301 /abcd/;
}

관련 정보