Localização exata do Nginx corresponde além do argumento

1

Na minha configuração do nginx, eu gostaria de pegar / foo / e fazer uma reescrita usando o local, mas ignorar / foo / anything-else

Eu tentei:

location = /foo-bar/ {

e

location ~ ^/foo-bar/$ {

e

location ~ /foo-bar/ { 

mas também captura e reescreve

/foo-bar/?t=aaa-bbb-ccc

Como faço para pegar apenas

/foo-bar/ 

e não

/foo-bar/?t=aaa-bbb-ccc  

?

Obrigado.

    
por Sean Lerner 23.03.2013 / 16:14

2 respostas

1

Como no encadeamento de comentários na primeira resposta, usei:

if ($request_uri = "/foo-bar/") { rewrite ^ … permanent; }

e eu nunca usei

/location/
    
por 02.04.2013 / 16:29
1
location = /foo/ {
    rewrite  ^  …  redirect;
}
location ~ /foo/ {
    return  404;
}

Se isso não funcionar, deve ser o armazenamento permanente infamous das respostas 301 Moved Permanently - tente sua solicitação com curl -v para ter certeza de que funciona ou não, e / ou limpe todo o cache de seu Gecko ou outro navegador (no Gecko não há outra maneira de contornar isso (além de limpar todo o cache) - o truque Shift-refresh não se aplica a 301 ).

Atualização: se você também precisa garantir que nenhum argumento seja aceito (por exemplo, / foo /? test), use o seguinte:

location = /foo/ {
    if ($args) { return 403; }
    rewrite  ^  …  redirect;
}
    
por 23.03.2013 / 18:55

Tags