Правило перезаписи не работает в NGINX

Рассмотрим URL-адрес, как показано ниже:

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

Как я могу получить его как:

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

Я хочу избавиться от обоих ?X и &Y Я был бы рад, если бы кто-нибудь дал мне знать, какое правило я должен использовать.

МОЙ БЛОК СЕРВЕРА:

  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; } } } 

Цель: Чтобы быть более точным, мой URL-адрес похож:

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

Я хочу, чтобы это было так:

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

В Apache мы можем использовать:

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

Когда я попытался преобразовать его в форму NGINX, он стал:

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

Но это не сработало.

Мне кажется, что вы не захватываете последние три символа имени файла (то есть pdf ), что означает, что они отсутствуют в перезаписанном URI.

Вы должны попробовать переместить ) , так что pdf будет зафиксирован как часть $1 :

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

EDIT: в ответ на ваш комментарий вы можете добавить новый блок местоположения, который соответствует URI, которые вы хотите отклонить, например:

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

Вышеуказанный блок местоположения регулярного выражения соответствует любому URI, который заканчивается на .pdf (с строкой запроса или без нее). Подробнее см. В этом документе .