본문 바로가기

C#(ASP.NET)

URL Rewriting in ASP.NET (실전활용)


이 포스트를 읽기 전에 꼭 URL Rewriting in ASP.NET 포스트를 먼저 읽어보도록 하자.

프로그램에서는 무엇이든지 간에 해당 기술의 기본원리를 알고 이해해야지만 더 좋은 적용방법과 응용방법이 생각날 것이고

문제에 직면했을때 더 빠른 해결방법을 찾아낼 수 있을것이다.

단지 주어진 기술, 또는 Copy & Paste는 자기발전에 전혀 도움이 되지 않거니와 개발자라고 하기에 챙피한 일이지 않은가?

그럼 모두 앞 포스트를 숙지하였다고 생각하고 앞 포스트의 내용을 기초로 하여 실제 사용가능한 URL Rewriter를 만들어 적용하여 보자.

아마도 아래 내용을 이해했다면 HttpModule을 이용한 URL Rewriter를 만드는건 어렵지 않을 것이다.

만약 어렵다면 제가 만들어놓은 어셈블리(.NET 2.0으로 제작)를 다운 받고 따라해 봅시다. ㅡㅡ;
(사실 내가 셋팅방법을 잊어버릴까봐 정리해 놓는것이다. ^^)



1. 어셈블리 파일을 해당 프로젝트의 /Bin/ 폴더에 복사한다.

2. Web.config 수정
    2-1. configuration 하위에 추가
      <configSections>
        <sectionGroup name="RewriterConfig">
          <section name="Rules" type="UrlReWriter.ReWriterRule, RewriterModule"/>
        </sectionGroup>
      </configSections>

    2-2. system.web 하위에 추가
      <httpModules>
        <add name="RewriterModule" type="UrlReWriter.ReWriterModule, RewriterModule" />
      </httpModules>

    2-3. configuration 하위에 추가
      <RewriterConfig>
        <Rules>
          <RewriterRule>
            <Url>^/([a-zA-Z0-9]+)/([0-9]+)/$</Url>
            <TargetUrl>/RW_Test.aspx?UserID=$1&amp;SeqNo=$2</TargetUrl>
          </RewriterRule>
          <RewriterRule>
            <Url>^/([a-zA-Z0-9]+)/([0-9]+)$</Url>
            <TargetUrl>/RW_Test.aspx?UserID=$1&amp;SeqNo=$2</TargetUrl>
          </RewriterRule>
           ................
       </Rules>
  </RewriterConfig>

3. IIS 셋팅
모든 IIS의 Request를 ASP.NET으로 라우트하기 위한 셋팅이다. 본 화면은 Windows 2003을 기준으로 하고 있다.

속성 > 홈디렉터리 > 구성을 클릭하면 다음과 같은 화면을 볼 수 있다.


   

그림과 같이 "삽입"을 클릭하여 다음 화면을 볼 수 있다.



실행파일 항목에 .NET 2.0의 aspnet_isapi.dll 의 위치를 명시해 줍니다. 아마 대부분 아래와 같은 경로일 것입니다.
c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

그 다음 제가 빨간색으로 박스를 쳐 놓은 부분... 저거 때문에 한 3일은 무한삽질한 듯 합니다. ㅠㅠ

저는 "파일이 있는지 확인"이 상단의 실행파일에 명시한 파일이 있는지 확인하는 옵션인줄 알았습니다. 그런데... 어흐흑... 그게 아니더군요.

앞 포스트의 마지막즘에 "필요한 디렉토리 구조 만들기" 를 보면 매년 해가 바뀔때마다 해당 디렉터리와 Default.aspx 파일이 필요하다고 되어 있다.

그 이유도 물론 잘 설명되어 있다. 바로 그 점이다 "파일이 있는지 확인" 이 체크되어 있으면 폴더 또는 파일이 존재할 경우에만 실행파일을 호출(라우팅)해 주는것이다.
앞 포스트의 "결과" 의 마지막 문장인 "모든 요청 정보를 ASP.NET 엔진에 라우트하도록 IIS 구성정보를 설정해야 한다" 이 부분이 의미하는것이 바로

"파일이 있는지 확인"에 체크를 해제하고 사용하라는 의미인것 같다.

이 체크가 해제되어 있을 경우 폴더나 파일이 존재하는지 확인하지 않고 바로 "실행파일"에 명시되어 있는 파일로 라우팅을 해 준다.

우리가 대부분 블로그 같은 경우 http://블로그도메인/글번호 와 같은 형태를 많이 사용하게 되는데 이럴경우 꼭 "파일이 있는지 확인"에서 체크를 해제해야만 한다.


크리에이티브 커먼즈 라이선스
Creative Commons License