Você pode substituir /./
sequências e /goods/../
sequências por um único /
. Por exemplo:
rewrite ^(.*)/\./(.*)$ $1/$2 redirect;
rewrite ^(.*)/(?!\.\.)[^/]+/\.\./(.*)$ $1/$2 redirect;
A sequência /(?!\.\.)[^/]+/
deve corresponder a qualquer elemento de caminho que não seja outro ..
. As reescritas acima são recursivas e emitem 302 respostas até que todas as seqüências /./
e /../
sejam corretamente removidas.
Como alternativa, o mesmo pode ser obtido usando um redirecionamento interno, colocando as instruções rewrite...last
dentro de um bloco location
adequado. Por exemplo:
location / {
rewrite ^(.*)/\./(.*)$ $1/$2 last;
rewrite ^(.*)/(?!\.\.)[^/]+/\.\./(.*)$ $1/$2 last;
}
Nesse caso, o URL exibido na barra de endereços do navegador não será alterado.
Veja este documento para obter detalhes sobre a diretiva rewrite
e este link para obter detalhes sobre a afirmação de antecipação negativa.