É possível normalizar o URL “double-dots” usando nginx?

1

De acordo com a RFC3986 URL como esta

http://example.com/catalog/category/goods/../brand/product.html

convertido por algum UserAgent (o curl seria um bom exemplo) para http://example.com/catalog/category/brand/product.html

Como posso obter esse comportamento usando a reconfiguração do nginx, se o meu UserAgent não conseguir analisar o URL original de maneira correta?

Isso é possível ou não?

    
por Twissell 04.05.2018 / 16:37

1 resposta

0

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.

    
por 04.05.2018 / 17:37