Webserver

重寫規則在 NGINX 中不起作用

  • September 19, 2020

考慮如下所示的 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; }
   }
}

**目的:**更準確地說,我的網址是這樣的:

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;

編輯:作為對您的評論的回應,您可以添加一個與您希望拒絕的 URI 匹配的新位置塊,例如:

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

.pdf上面的正則表達式位置塊匹配任何以(帶或不帶查詢字元串)結尾的 URI 。有關詳細資訊,請參閱此文件

引用自:https://unix.stackexchange.com/questions/335782