A regra de reescrever não funciona no NGINX

3

Considere um URL como mostrado abaixo:

http://myDomain.tld/anAddress/myFile.pdf?X=zzz&Y=kkk

Como posso ter isso como:

http://myDomain.tld/anAddress/myFile.pdf/zzz/kkk

Eu quero me livrar de ?X e &Y . Eu ficaria feliz se alguém me dissesse qual regra eu deveria usar.

MEU BLOCO DE SERVIDOR:

    server {
    listen 80;
        server_name _;


        location  / {
            root /my/root/path;

            rewrite ^/(.*)pdf/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;

            secure_link $arg_md5,$arg_expires;
            autoindex on;

            secure_link_md5 "$secure_link_expires$uri aWord";

            if ($secure_link = "") { return 403; }
            if ($secure_link = "0") { return 410; }
        }
    }

Finalidade: Para ser mais preciso, meu URL é como:

http://myDomain.tld/anAddress/myFile.pdf?md5=So1Me2Ha3Sh4&expires=123456789

Eu quero que seja assim:

http://myDomain.tld/anAddress/myFile.pdf/So1Me2Ha3Sh4/123456789

No Apache , podemos usar:

RewriteRule ^(.*)pdf/(.*)/(.*)$ $1?md5=$2&expires=$3

Quando tentei convertê-lo para o formato NGINX, tornou-se:

rewrite ^/(.*)pdf/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;

Mas não funcionou.

    
por Parsa Samet 08.01.2017 / 14:34

1 resposta

3

Parece-me que você não está capturando os três últimos caracteres do nome do arquivo (por exemplo, pdf ), o que significa que eles estão ausentes do URI reconfigurado.

Você deve tentar mover o ) , para que pdf seja capturado como parte de $1 :

rewrite ^/(.*pdf)/(.*)/(.*)$ /$1?md5=$2&expires=$3 break;

EDIT: Em resposta ao seu comentário, você pode adicionar um novo bloco de localização que corresponda aos URIs que você deseja rejeitar, por exemplo:

location ~* \.pdf$ {
    return 403;
}

O bloco de localização de expressão regular acima corresponde a qualquer URI que termine com .pdf (com ou sem uma string de consulta). Consulte este documento para obter detalhes.

    
por 09.01.2017 / 13:09