Какой лучший способ перенаправить все 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/;
}

Связанный контент