요청 URI에서 파일 이름 만 추출하는 방법


11

파일 확장자에 따라 요청 URI를 다시 작성하려고 시도한 다음 URI에서 파일 이름 만 추출하여 다른 폴더에 저장하려고합니다. 여기서 문제는 파일 이름 및 사용할 수있는 변수에 대한 변수를 미리 정의되지 않은 uri, request_uri그리고 request_filename전체 URI를 제공 할 것입니다.

server{

        set $file_folder D:/nginx-1.0.15/imageAll/;  

        location ~*+.(gif|jpg)$ { 
            try_files $uri @imgstore;
        }

        location @imgstore { 
            proxy_pass $file_folder$request_filename;
            proxy_store on;
            proxy_temp_path /nginx-1.0.15/images/;
            proxy_store_access  user:rw  group:rw  all:r;
       }
}

나는, 확장 .JPG 또는 .gif 참고를 받고 난 둘 때 즉 할 수있는 최선 $1의 장소에서 $request_filename같은 :

location @imgstore { 
    proxy_pass $file_folder$1;
}

그래서 알고 싶습니다.

  1. 요청에서 파일 이름을 얻는 방법은 무엇입니까?
  2. 폴더에서 다른 폴더로 이미지를 저장하는 올바른 방법입니까?

답변:


17

원래 요청 또는 현재 URI (내부 리디렉션 후)의 파일 이름을 원하십니까? 둘 다 map 모듈을 사용하여 가능 합니다 .

# Gets the basename of the original request
map $request_uri $request_basename {
    ~/(?<captured_request_basename>[^/?]*)(?:\?|$) $captured_request_basename;
}

# Gets the basename of the current uri
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}

그런 다음 필요할 때마다 $ request_basename 또는 $ basename을 사용하십시오. 맵은 http {} 컨텍스트에서 정의되어 서버의 형제 {}로 만들어 져야합니다.


현재 uri의 파일 이름을 원합니다. 맵 모듈이 제공 할 수는 없다고 생각하지만 시도하겠습니다.
Johnta

게시하기 전에 로컬에서 테스트했으며 두 번째 맵이 작동합니다 (0.9.6 이상을 사용하는 한)
kolbyjack

Kolbyjack, 고맙습니다. 일을 잘 해냈습니다. 파일 이름과 확장자를 받았습니다.
Johnta
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.