NGINX에서 작동하지 않는 규칙 재작성

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

존재하다아파치, 다음을 사용할 수 있습니다.

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

NGINX 형식으로 변환하려고 하면 다음과 같습니다.

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

그러나 그것은 작동하지 않았습니다.

답변1

파일 이름의 마지막 세 문자(예: )를 캡처하지 않는 것 같습니다. pdf이는 다시 작성된 URI에서 해당 문자가 손실되었음을 의미합니다.

캡처가 다음의 일부가 )되도록 움직여야 합니다 .pdf$1

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

편집: 귀하의 의견에 대한 응답으로 거부하려는 URI와 일치하는 새 위치 블록을 추가할 수 있습니다. 예를 들면 다음과 같습니다.

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

위의 정규식 위치 블록은 .pdf(쿼리 문자열 유무에 관계없이)로 끝나는 모든 URI와 일치합니다. 바라보다이 파일더 알아보기.

관련 정보