Redirecionamento nginx /2013/04/test.html para /test - não funciona

Redirecionamento nginx /2013/04/test.html para /test - não funciona

Estou ficando louco com isso. Como posso redirecionar um determinado URL /2013/04/test.htmlno /testnginx?

Eu tentei isso: mas não funciona:

server {
     location /2013/05/test.html {
         return 301 http://$server_name/test;
     }
}

Realizei alguns testes - por algum motivo, qualquer URL sem extensão .html na parte location da linha de configuração será redirecionado corretamente, mas assim que coloco .html no local, kaboom, ele para de funcionar.

Alguma ideia de por que é assim? Obrigado!

Responder1

Em vez de ter um bloco de localização para cada redirecionamento, você pode simplesmente adicionar regras de reescrita em um bloco de localização existente:

rewrite /2013/05/test.html http://$server_name/test permanent;
rewrite /2013/05/test2.html http://$server_name/test2 permanent;

Você também pode fazer várias expressões regulares para evitar ter que adicionar uma nova cada vez que um novo 'link permanente' for adicionado.

Responder2

Concordo com Jason Ilicic, usando umregra de reescritaseria provavelmente mais eficiente.

Se você realmente quiser usar obloco de localização, você já tentou usar o modificador "="? Se você tiver vários locais, a lógica de seleção do Nginx pode estar selecionando um diferente do que você espera.

Da documentação do Nginx

using the “=” modifier it is possible to define an exact match of URI and location

então por exemplo

server {
    location = /2013/05/test.html {
        return 301 http://$server_name/test;
    }
}

informação relacionada