¿Cuál es la mejor manera de redirigir todas las URL que no comienzan con el prefijo al prefijo determinado?

¿Cuál es la mejor manera de redirigir todas las URL que no comienzan con el prefijo al prefijo determinado?

Me gustaría ser redirigido a todas las URL quenocomience con el prefijo /abcd/a -> /abcd/considerando que el servidor usa 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/;
                }
        }
}

Estoy pensando en usar expresiones regulares y negación algo como esto:

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

¿Existe alguna otra/mejor solución?

Respuesta1

Creo que eso es más complejo de lo necesario. nginxevalúadesde el bloque más específico hasta el menos específico.

En este ejemplo, todo lo que coincida con /abcd va al bloque proxy_pass, todo lo demás va al bloque / que se redirige.

No lo he probado, inténtalo y si no funciona puedo pensar un poco más.

location /abcd {
     proxy_pass (etc);
}

location / {
      return 301 /abcd/;
}

información relacionada