[Classic ASP]에러 페이지로 URL Rewriter 흉내내기 ASP(Classic)

image.jpg라는 이미지가 있다고 해 보자. 이 파일에 접근하는 사용자의 정보를 추적해서 db에 기록하는 것이 목적이다. 여러 가지 방법이 있지만 이 글은 URL Rewriter에 관한 글이니 그것만 가지고 이야기를 해 보자.

image.asp 파일을 만들어서 이미지 파일을 흉내낼 수 있지만, 이 경우 이미지를 웹에디터나 thickbox등 자바스크립트에서 사용하고자 하면 이들 프로그램의 확장자 인식 기능으로 인해 문제가 발생한다. 그러므로 최종 사용자에게 제공될 파일은 반드시 이미지 파일(.jpg, png, gif 등)의 확장자를 가져야 하며, 파라미터는 사용하지 말아야 한다.

어떤 방법이 있을까? 일단 ASP.NET 이라면 URLRewriter.NET과 ashx 파일의 조합을 생각해볼 수 있다.

web.config :
     <rewriter>
        <rewrite url="/redirect/image.jpg" to="/img/ImageHandler.ashx" />
        <rewrite url="/redirect/([^/]+)/(.+)" to="/img/ImageHandler.ashx?type=$1&file=$2" />
    </rewriter>

첫 번째 줄은 image.jpg로의 접근을 무조건 ImageHandler.ashx로 리다이렉팅 시킨다. 두번째 줄은 파라미터를 활용하는 예제를 보여준다. 이 설정에 따르면 /redirect/userid/image.jpg는 /img/ImageHandler.ashx?type=userid&file=image.jpg 로 치환된다.

클래식 ASP라면? ISAPI 필터를 사용하는 방법이 있겠지만 컴포넌트 개발과 IIS 단에서의 설치를 요하므로 좀더 간단한 방법을 찾아 보자. 바로 기본 에러 페이지를 이용하는 방법이다.

여기서는 윈도우 서버 2008과 IIS 7을 기반으로 설명하겠다.

우선, ASP 파일을 만든다. 내용은 다음과 같다.

<%
'여기에 DB에 접속해서 기록하는 내용을 삽입한다.
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://.../img/realImg.jpg"
Response.End
%>

이 파일은 단순하다. /img/image.asp에 접근하는 사용자의 정보를 모아 DB에 기록한 후 실제 이미지 경로로 보내버린다. 여기까진 특이할 게 없다.
이제 이 파일을 /redirect/image.jpg 라는 경로로 접근할 수 있게 해 보자.

우선 /redirect 라는 폴더를 만들어야 한다. 그 다음 IIS 관리자에서 /redirect 폴더를 선택하고 IIS 섹션의 '오류 페이지' 아이콘을 클릭한다.

classic_asp_url_rewrite_1.png
404를 더블클릭하여 다음과 같이 설정한다.

classic_asp_url_rewrite_2.png

확인을 눌러 창을 닫은 후 화면 오른쪽의 '기능 설정 편집'을 클릭해 다음과 같이 설정한다.

classic_asp_url_rewrite_3.png

다 되었다. 이제 /redirect/lalala.jpg 로 접근해 보자. 물론 해당 파일은 존재하지 않는다. 하지만 이미지는 잘 출력될 것이다. 문제가 있다면 브라우저에서 이 주소를 입력할 경우 URL이 lalala.jpg 에서 realImg.jpg로 변경된다는 점인데, 아마도 WriteFile을 이용하면 해결될 것으로 보인다.

그러나 현재로써도 img 태그는 물론이고 자바 스크립트를 이용해도 잘 동작한다. 시험 삼아 test.htm 페이지를 만들자. 그리고 <img src="/redirect/lalala.jpg" />를 넣어 보자. 원하는 이미지를 잘 표시해 줄 것이다.

참고 :
IIS7 – Enabling Custom Error Pages
How to get the *actual* client URL from a Classic ASP Request? - Stack Overflow
Tag :
, ,

Leave Comments