NGINX 301 Redirecionar um URL com parâmetros para um novo URL

2

Eu implantei um site ao vivo e tente redirecionar alguns dos URLs originais para os novos URLs. Sou relativamente novo na configuração do NGINX em redirecionamentos como este.

Este funciona:

location /contactus.aspx {
    return 301 $scheme://$host/contacts;
}

Estes não funcionam (A url resulta em um 404 e não redireciona):

location /productcatalog.aspx?directoryid=11 {
    return 301 $scheme://$host/hard-drive-cases;
}
location /productdetails.aspx?productid=26* {
    return 301 $scheme://$host/lto-5-blue;
}

Já consegui service nginx reload sem erros.

A maior diferença entre os redirecionamentos que funcionam e os redirecionamentos que não funcionam são os parâmetros adicionados. Qual é a melhor maneira de redirecionar URLs com parâmetros (e um curinga no final) para que funcione corretamente?

    
por RNickMcCandless 04.02.2014 / 00:18

1 resposta

3

A diretiva location não corresponde na string de consulta. Então você terá que fazer outra coisa.

Eu presumo que você tenha um número grande deles para trabalhar, então eu sugiro usar um par de map s . Por exemplo:

map $arg_directoryid $mycategory {
    11 hard-drive-cases;
    12 some-other-category;
    default ""; # would go to the homepage, change it to go to some other page
}

Então você faria um location como:

location /productcatalog.aspx {
    return 301 $scheme://$host/$mycategory;
}

Faça um segundo map e location para o $arg_productid correspondente a productdetails.aspx . Se esse for excepcionalmente grande, você poderá ter problemas de desempenho e precisará eliminar isso e fazer alguns scripts para obter o redirecionamento de um banco de dados.

O map s deve estar no bloco http , não dentro de um bloco server . Se você estiver hospedando vários sites, o melhor lugar para colocá-los, na minha opinião, é imediatamente antes do bloco server ao qual eles correspondem.

    
por 04.02.2014 / 00:23