IIS URL Rewrite 활용해서 파일명 없이 다운로드 받기

2024. 1. 22. 00:26·HTTP

간혹 웹페이지 수정을 최소화 하기위해서, URL에 파일명 없이 다운로드 받고 싶은 경우가 많이 있을 것이다.

 

예를 들어,

 

http://www.example.com/latest/ 

 

입력시, 가장 최신의 파일을 다운로드 받는 형태가 될 것이다.

 

물론 서버 사이드 스크립트나 자바스크립트 등을 활용해 쉽게 목적을 이룰 수 있지만, 코드 변경 없이 IIS 의 URL Rewrite 만을 활용해 처리해 볼 생각이다.

 

IIS 에 Site 를 만들고, 문서 최상위 폴더 아래 다운로드 될 파일이 있는 file 이라는 폴더를 추가하고, 해당 폴더에 aaa.exe 라는 파일을 한개 추가 하였다.

 

서버 IP와 경로를 넣고 파일 명을 넣으면 정상적으로 파일이 다운로드 된다.

 

http://192.168.111.10/file/aaa.exe

 

 

하지만 파일명 없이 http GET을 하면 200 OK 가 나오지만, 해당 폴더에 Default Document 가 없으니 빈 화면만 표시된다.

 

 

이제 파일명 없이 file 까지만 입력해도 파일을 다운로드 되게 만들어 보자.

 

IIS > 웹서버 > Sites > 생성한 서버로 가서, Features View에서 URL Rewrite를 더블클릭한다.

 

 

우측 상단의 Add Rule(s)...클릭 후 Inbound rules 에서 Blank rule 선택 후 OK 클릭

 

 

Name은 아무 이름이나 (아래 예제에서는 test) 넣고,

 

Match URL 에서

Requested URL : Matches the Pattern

Using : Regular Expressions

Pattern : ^file/?$

Ignore case : 선택

 

Server Variables 에서 우측 Add... 클릭 후,

Server variable name : file_name

Value : aaa.exe (다운로드 받을 파일의 이름)

 

 

Action 에서

Action type : Rewrite

Rewrite URL : file/{file_name}

Stop processiong of subsequent rules : 선택

 

최종적으로 아래와 같이 설정 후 우측의 Apply 를 클릭한다.

 

 

위 내용을 간단히 설명하면,

 

GET /file 또는 GET /file/ 요청이 들어오면,

GET /file/aaa.exe 로 변경해 서버에 요청한다는 내용이다.

 

이제 브라우저에서 http://192.168.111.10/file 을 입력해보자.

 

 

파일이 뭔가 다운로드 된다. 훌륭하다.

그런데, 파일명이 이상하다. 파일명이 file 이다.

 

 

웹브라우저는 /file 을 요청했고, 웹서버는  application/octet-stream 타입으로 그에 대한 응답을 했을 뿐이다.

 

이를 해결하기 위해서 필요한게 Content-Disposition 헤더 이다.

간단히 말하면, 응답 시 해당 헤더에 파일이름을 알려줘서, 다운로드 때 서버가 의도한 대로 파일이름을 지정할 수 있는 것이다.

 

이번엔 응답에 대한 동작이므로, URL Rewrite 로 가서, Add Rule(s)... 클릭 후 Outbound rules 섹션의 Blank rule 선택 후 OK 클릭

 

 

Name 에 원하는 이름을 입력 하고,(예제에서는 download_file_name)

Precondition 에서 <Create New Precondition...>을 선택한다.

 

Name 에 원하는 이름을 입력(예제에서는 EXEFiles)하고, 아래 그림과 같이 입력한다.

응답에 Content-Type: application/octet-stream 인 경우 해당 동작을 하는 것으로, application/octet-stream 은 뭔지 모르는 바이너리의 경우 사용하는 타입이다. (주로 파일 다운로드 등)

 

 

Match 에서,

Matching scope : Server Variable 선택

Variable name : RESPONSE_CONTENT_DISPOSITION

Variable value : Matches the Pattern

Using : Regular Expressions

Pattern : .*

 

Action 에서

Action type : Rewrite

Value : attachment; filename="{file_name}"

Replace existing server variable value : 선택

Stop processing of subsequent rules : 선택

 

최종 적으로 아래와 같이 설정 후 좌측에 Apply 클릭 한다.

 

이제 다시 웹 브라우저에서 

 

http://192.168.111.10/file

 

또는

 

http://192.168.111.10/file/

 

를 입력하면, 

 

 

 

CONTENT-DISPOSITION: 헤더와 값도 정상적으로 입력이 되고,

※ http 표준에서는 헤더명의 대소문자를 구별하지 않습니다.

    CONTENT-DISPOSITION

    Content-disposition

    Content-Disposition

    content-disposition

    모두 동일 한 헤더명으로 인식 합니다.

 

 

파일명도 의도한 대로 aaa.exe 로 정상적으로 다운로드 되었다.

 

만약 파일을 aaa.exe 에서 bbb.exe로 변경이 필요하면,

/file 폴더에 bbb.exe 파일을 복사 후, URL Rewrite의 Inbound 섹션에 있는 룰에서

Server Variables섹션의  file_name 의 값을 aaa.exe 에서 bbb.exe 로 변경하면 된다.

'HTTP' 카테고리의 다른 글

HTTP Chunking 과 테스트 클라이언트 구현  (0) 2024.06.22
'HTTP' 카테고리의 다른 글
  • HTTP Chunking 과 테스트 클라이언트 구현
virbr0.net
virbr0.net
  • virbr0.net
    virbr0.net
    virbr0.net
  • 전체
    오늘
    어제
    • 분류 전체보기
      • SIP
      • HTTP
      • OS
      • 프로그래밍
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다익스트라
    ADC
    IIS
    파일명 없이 다운로드
    RDP
    시간복잡도
    회사생활
    클라우드
    윈도우서버
    DFS
    딕셔너리
    chunked
    rtp inject
    RTP
    파일명
    HTTP
    SIP
    유기농 배추
    파이썬
    가상화
    URL Rewrite
    셀프칭찬
    alteon
    SBC
    인증서
    브로드웍스
    BFS
    해외발신
    최단경로
    인터넷전화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
virbr0.net
IIS URL Rewrite 활용해서 파일명 없이 다운로드 받기
상단으로

티스토리툴바