다음을 통해 공유


URL 다시 쓰기 모듈에 대한 재작성 규칙 만들기

작성자 : Ruslan Yakushev

URL 다시 쓰기 모듈은 독립 실행형 IIS 서버에 대한 다운로드로 사용할 수 있는 IIS에 대한 확장이며, WAWS(Windows Azure 웹 사이트) 의 모든 웹 사이트에 미리 설치되어 사용 가능합니다. 이 연습에서는 URL 다시 쓰기 모듈에 대한 다시 쓰기 규칙 집합을 만들고 테스트하는 방법을 안내합니다.

사전 요구 사항

이 연습을 수행하려면 다음 필수 구성 요소가 필요합니다.

  1. ASP.NET 역할 서비스를 사용하도록 설정된 IIS 7 이상
  2. URL 다시 쓰기 모듈이 설치되었습니다. 자세한 내용은 URL 다시 쓰기 모듈 사용을 참조하세요.

테스트 웹 페이지 설정

URL 다시 쓰기 모듈의 작동 방식을 설명하기 위해 간단한 테스트 ASP.NET 페이지를 사용합니다. 이 페이지는 웹 서버 변수를 읽고 브라우저에서 해당 값을 출력합니다.

다음 ASP.NET 코드를 복사하여 article.aspx라는 파일의 %SystemDrive%\inetpub\wwwroot\ 폴더에 넣습니다.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>URL Rewrite Module Test</title>
</head>
<body>
      <h1>URL Rewrite Module Test Page</h1>
      <table>
            <tr>
                  <th>Server Variable</th>
                  <th>Value</th>
            </tr>
            <tr>
                  <td>Original URL: </td>
                  <td><%= Request.ServerVariables["HTTP_X_ORIGINAL_URL"] %></td>
            </tr>
            <tr>
                  <td>Final URL: </td>
                  <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td>
            </tr>
      </table>
</body>
</html>

이 파일을 복사한 후 브라우저에서 http://localhost/article.aspx 페이지가 올바르게 렌더링되었는지 찾아서 검사.

다시 쓰기 규칙 만들기

다음 형식을 사용하여 URL을 다시 작성하는 간단한 다시 쓰기 규칙을 만듭니다.

http://localhost/article/342/some-article-title
다음과 같이 변경합니다.
http://localhost/article.aspx?id=342&title=some-article-title.

IIS 관리자에서 URL 다시 쓰기 UI를 사용하여 다시 쓰기 규칙을 만듭니다. 이렇게 하려면 다음 단계를 수행하세요.

  1. IIS 관리자로 이동합니다.
  2. 기본 웹 사이트를 선택합니다.
  3. 기능 보기에서 URL 다시 쓰기를 클릭합니다.
    기본 웹 사이트 홈 창을 보여 주는 스크린샷 U RL 다시 쓰기가 선택되었습니다.
  4. 오른쪽의 작업 창에서 규칙 추가...를 클릭합니다.
    U RL 다시 쓰기 창을 보여 주는 스크린샷
  5. 규칙 추가 대화 상자에서 빈 규칙을 선택하고 확인을 클릭합니다.
    규칙 추가 대화 상자를 보여 주는 스크린샷

이제 실제 다시 쓰기 규칙을 정의해야 합니다. URL 다시 쓰기 모듈에서 4개의 필수 정보를 지정하여 다시 쓰기 규칙이 정의됩니다.

  • 규칙의 이름입니다.
  • URL 문자열을 일치시키는 데 사용할 패턴입니다.
  • 선택적 조건 집합입니다.
  • 패턴이 일치하고 모든 조건 확인이 성공하는지 여부를 수행하는 작업입니다.

규칙 이름 지정

이름 텍스트 상자에 규칙을 고유하게 식별하는 이름(예: "article.aspx로 다시 쓰기")을 입력합니다.

인바운드 규칙 편집 창을 보여 주는 스크린샷

패턴 정의

패턴 텍스트 상자에 다음 문자열을 입력합니다.

^article/([0-9]+)/([_0-9a-z-]+)

이 문자열은 패턴이 다음 조건을 충족하는 URL 문자열과 일치하게 지정하는 정규식입니다.

  1. 문자 "article/"의 시퀀스로 시작합니다.
  2. 첫 번째 "/" 다음에 하나 이상의 숫자 문자를 포함합니다.
  3. 두 번째 "/" 다음에 하나 이상의 영숫자 또는 "_" 또는 "-" 문자를 포함합니다.

정규식의 특정 부분이 괄호 안에 있습니다. 이러한 괄호는 나중에 백 참조를 사용하여 규칙에서 참조할 수 있는 캡처 그룹을 만듭니다.

작업 정의

만드는 규칙은 URL을 다시 작성해야 하므로 작업 그룹 상자에 나열된 다시 쓰기 작업 유형을 선택합니다. URL 다시 쓰기: 텍스트 상자에 다음 문자열을 입력합니다.

article.aspx?id={R:1}&title={R:2}

이 문자열은 입력 URL을 다시 작성할 새 값을 지정합니다. 쿼리 문자열 매개 변수의 값에 대해 괄호를 사용하여 규칙 패턴에 정의된 캡처 그룹에 대한 백 참조인 {R:1} 및 {R:2}을(를) 사용했습니다.

다른 모든 설정에 대한 기본값을 그대로 둡니다. 인바운드 규칙 편집 속성 페이지는 다음 페이지와 같습니다.

인바운드 규칙 편집 속성 페이지를 보여 주는 스크린샷

오른쪽에서 적용 을 클릭하여 규칙을 저장합니다.

구성 파일에서 다시 쓰기 규칙 보기

다시 쓰기 규칙은 ApplicationHost.config 파일 또는 Web.config 파일에 저장됩니다. 방금 만든 규칙의 구성을 검사 %SystemDrive%\inetpub\wwwroot에 있는 Web.config 파일을 엽니다. 이 파일에는 이 규칙 정의가 포함된 섹션이 표시됩니다 <rewrite> .

<rewrite>
  <rules>
    <rule name="Rewrite to article.aspx">
      <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
      <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
    </rule>
  </rules>
</rewrite>

위의 구문은 WAWS(Windows Azure 웹 사이트)의 Web.config URL 다시 쓰기 구성에도 적용됩니다.

다시 쓰기 규칙 테스트

규칙이 URL을 올바르게 다시 작성하는지 테스트하려면 웹 브라우저를 열고 다음 URL을 요청합니다.

http://localhost/article/234/some-title

웹 서버의 다시 쓰기 규칙이 원래 URL을 Article.aspx로 변경했으며 쿼리 문자열 매개 변수의 값으로 "234" 및 "some-title"을 전달한 것을 볼 수 있습니다.

인터넷 Explorer U RL 다시 쓰기 모듈 테스트 페이지를 보여 주는 스크린샷

리디렉션 규칙 만들기

이제 모든 URL을 다음 형식으로 리디렉션하는 리디렉션 규칙을 만듭니다.

http://localhost/blog/some-other-title/543
다음 형식으로 변경합니다.
http://localhost/article/543/some-other-title

리디렉션 규칙을 사용하면 둘 이상의 URL이 단일 웹 페이지를 가리킬 수 있습니다.

이렇게 하려면 IIS 관리자에서 URL 다시 쓰기 기능 보기 UI를 엽니다. 규칙 추가...를 클릭한 다음 빈 규칙 템플릿을 다시 선택합니다.

규칙 편집 페이지에서 다음을 입력합니다.

  • 이름: 블로그에서 리디렉션 (규칙의 고유한 이름입니다.)
  • 패턴: ^blog/([_0-9a-z-]+)/([0-9]+) (이 패턴은 "블로그"로 시작하고 URL의 두 번째 및 세 번째 세그먼트를 백 참조로 캡처하는 URL 문자열과 일치합니다.)
  • 작업: 리디렉션 (리디렉션 작업으로 인해 리디렉션 응답이 브라우저로 다시 전송됩니다.)
  • 리디렉션 URL: article/{R:2}/{R:1} (이 대체 문자열은 리디렉션 URL로 사용됩니다. 역참조를 사용하여 패턴 일치 중에 캡처된 원래 URL 조각을 보존하고 다시 정렬합니다.)

아래와 같이 이름, 패턴 및 작업을 입력합니다.

인바운드 규칙 편집 창을 보여 주는 스크린샷 이름, 패턴 및 작업에 대한 새 항목이 있습니다.

아래와 같이 리디렉션 URL을 입력합니다.

인바운드 규칙 편집 창을 보여 주는 스크린샷 작업 유형에서 리디렉션이 선택되었으며 리디렉션 UR L이 입력됩니다.

다른 모든 설정에 대한 기본값을 그대로 둡니다. 오른쪽에서 적용 을 클릭하여 규칙을 저장합니다.

리디렉션 규칙 테스트

규칙이 요청을 올바르게 리디렉션하는지 테스트하려면 웹 브라우저를 열고 다음 URL을 요청합니다.

http://localhost/blog/some-other-title/323

리디렉션 규칙 실행의 결과로 브라우저가 로 리디렉션된 http://localhost/article/323/some-other-title 다음 이전에 만든 다시 쓰기 규칙에 따라 요청이 다시 작성된 것을 볼 수 있습니다.

U RL 다시 쓰기 모듈 테스트 페이지의 인터넷 Explorer 보여 주는 스크린샷.

액세스 블록 규칙 만들기

만들 세 번째 규칙은 해당 요청에 호스트 헤더 집합이 없는 경우 웹 사이트에 대한 모든 요청을 차단하는 데 사용됩니다. 이 유형의 규칙은 호스트 이름을 사용하는 대신 서버의 IP 주소에 대해 HTTP 요청을 실행하여 수행되는 해킹 시도를 방지하려는 경우에 유용합니다.

IIS 관리자를 사용하지 않고 이 규칙을 만듭니다. 이 문서 초기에 article.aspx 테스트 파일에 사용한 폴더에서 %SystemDrive%\inetpub\wwwroot\ Web.config 파일을 엽니다. <rewrite> 섹션을 찾습니다. 컬렉션의 첫 번째 규칙이 <되도록 규칙> 컬렉션에 다음 규칙을 삽입합니다.

<rule name="Fail bad requests">
  <match url=".*"/>
  <conditions>
    <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
  </conditions>
  <action type="AbortRequest" />
</rule>

섹션은 <rewrite> 다음 코드와 같이 표시됩니다.

<rewrite>
  <rules>
    <rule name="Fail bad requests">
      <match url=".*"/>
      <conditions>
        <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
      <action type="AbortRequest" />
    </rule>
    <rule name="Redirect from blog">
      <match url="^blog/([_0-9a-z-]+)/([0-9]+)" />
      <action type="Redirect" url="article/{R:2}/{R:1}" redirectType="Found" />
    </rule>
    <rule name="Rewrite to article.aspx">
      <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
      <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" />
    </rule>
  </rules>
</rewrite>

규칙을 분석하여 규칙을 이해해 보겠습니다.

<match url=".*"/>

위의 요소는 규칙이 모든 URL 문자열과 일치한다는 것을 나타냅니다.

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

위의 요소는 서버 변수 HTTP_HOST 읽어 호스트 헤더 값을 검색하고 패턴 "localhost"와 일치시킨 다음 일치 결과를 무효화하는 조건을 규칙에 추가합니다. 즉, 조건은 호스트 헤더가 "localhost"가 일치하지 않는지 확인합니다.

<action type="AbortRequest" />

위의 요소는 URL 재작성 모듈에 HTTP 요청을 종료하도록 지시합니다.

액세스 블록 규칙 테스트

이 규칙을 테스트하려면 웹 브라우저를 열고 를 요청합니다 http://127.0.0.1/article/234/some-title. 서버에서 응답을 받지 못하는 브라우저가 표시됩니다. 그러나 를 요청 http://localhost/article/234/some-title하면 웹 서버가 성공적으로 응답합니다.

실패한 디스플레이는 다음과 같습니다.

이 페이지를 표시할 수 없다는 브라우저를 보여 주는 스크린샷.

성공적인 디스플레이는 다음과 같습니다.

브라우저에서 U RL 다시 쓰기 모듈 테스트 페이지를 보여 주는 스크린샷

요약

이 연습에서는 IIS 관리자를 사용하거나 Web.config 파일을 수동으로 편집하여 URL 다시 쓰기 규칙을 구성하는 방법을 알아보았습니다. 이 연습에서 만든 규칙은 정규식 지원 및 HTTP 헤더 및 서버 변수를 사용하여 다시 쓰기 결정을 내리는 기능과 같은 URL 다시 쓰기 모듈의 중요한 기능 중 일부를 보여 줍니다.