Qual é a melhor maneira de redirecionar todos os urls que não iniciam com prefixo para o prefixo dado

1

Eu gostaria de ser redirecionado para todos os URLs que não iniciam com o prefixo /abcd/ para - > /abcd/ considerando que o 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/;
                }
        }
}

Estou pensando em usar regex e negação algo assim:

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

Existe alguma outra solução melhor?

    
por Peter Jurkovič 23.02.2018 / 18:02

1 resposta

2

Acho que é mais complexo do que você precisa. Nginx avalia o bloco mais específico até o mínimo específico.

Neste exemplo, qualquer coisa que combine / abcd vá para o bloco proxy_pass, todo o resto vai para o bloco / que é redirecionado.

Eu não testei isso, tente e, se não der certo, posso pensar um pouco mais.

location /abcd {
     proxy_pass (etc);
}

location / {
      return 301 /abcd/;
}
    
por 23.02.2018 / 20:05

Tags