URL 다시 쓰기 모듈에 대한 재작성 규칙 만들기
URL 다시 쓰기 모듈은 독립 실행형 IIS 서버에 대한 다운로드로 사용할 수 있는 IIS에 대한 확장이며, WAWS(Windows Azure 웹 사이트) 의 모든 웹 사이트에 미리 설치되어 사용 가능합니다. 이 연습에서는 URL 다시 쓰기 모듈에 대한 다시 쓰기 규칙 집합을 만들고 테스트하는 방법을 안내합니다.
사전 요구 사항
이 연습을 수행하려면 다음 필수 구성 요소가 필요합니다.
- ASP.NET 역할 서비스를 사용하도록 설정된 IIS 7 이상
- 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를 사용하여 다시 쓰기 규칙을 만듭니다. 이렇게 하려면 다음 단계를 수행하세요.
- IIS 관리자로 이동합니다.
- 기본 웹 사이트를 선택합니다.
- 기능 보기에서 URL 다시 쓰기를 클릭합니다.
- 오른쪽의 작업 창에서 규칙 추가...를 클릭합니다.
- 규칙 추가 대화 상자에서 빈 규칙을 선택하고 확인을 클릭합니다.
이제 실제 다시 쓰기 규칙을 정의해야 합니다. URL 다시 쓰기 모듈에서 4개의 필수 정보를 지정하여 다시 쓰기 규칙이 정의됩니다.
- 규칙의 이름입니다.
- URL 문자열을 일치시키는 데 사용할 패턴입니다.
- 선택적 조건 집합입니다.
- 패턴이 일치하고 모든 조건 확인이 성공하는지 여부를 수행하는 작업입니다.
규칙 이름 지정
이름 텍스트 상자에 규칙을 고유하게 식별하는 이름(예: "article.aspx로 다시 쓰기")을 입력합니다.
패턴 정의
패턴 텍스트 상자에 다음 문자열을 입력합니다.
^article/([0-9]+)/([_0-9a-z-]+)
이 문자열은 패턴이 다음 조건을 충족하는 URL 문자열과 일치하게 지정하는 정규식입니다.
- 문자 "article/"의 시퀀스로 시작합니다.
- 첫 번째 "/" 다음에 하나 이상의 숫자 문자를 포함합니다.
- 두 번째 "/" 다음에 하나 이상의 영숫자 또는 "_" 또는 "-" 문자를 포함합니다.
정규식의 특정 부분이 괄호 안에 있습니다. 이러한 괄호는 나중에 백 참조를 사용하여 규칙에서 참조할 수 있는 캡처 그룹을 만듭니다.
작업 정의
만드는 규칙은 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}&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"을 전달한 것을 볼 수 있습니다.
리디렉션 규칙 만들기
이제 모든 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을 입력합니다.
다른 모든 설정에 대한 기본값을 그대로 둡니다. 오른쪽에서 적용 을 클릭하여 규칙을 저장합니다.
리디렉션 규칙 테스트
규칙이 요청을 올바르게 리디렉션하는지 테스트하려면 웹 브라우저를 열고 다음 URL을 요청합니다.
http://localhost/blog/some-other-title/323
리디렉션 규칙 실행의 결과로 브라우저가 로 리디렉션된 http://localhost/article/323/some-other-title
다음 이전에 만든 다시 쓰기 규칙에 따라 요청이 다시 작성된 것을 볼 수 있습니다.
액세스 블록 규칙 만들기
만들 세 번째 규칙은 해당 요청에 호스트 헤더 집합이 없는 경우 웹 사이트에 대한 모든 요청을 차단하는 데 사용됩니다. 이 유형의 규칙은 호스트 이름을 사용하는 대신 서버의 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}&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
하면 웹 서버가 성공적으로 응답합니다.
실패한 디스플레이는 다음과 같습니다.
성공적인 디스플레이는 다음과 같습니다.
요약
이 연습에서는 IIS 관리자를 사용하거나 Web.config 파일을 수동으로 편집하여 URL 다시 쓰기 규칙을 구성하는 방법을 알아보았습니다. 이 연습에서 만든 규칙은 정규식 지원 및 HTTP 헤더 및 서버 변수를 사용하여 다시 쓰기 결정을 내리는 기능과 같은 URL 다시 쓰기 모듈의 중요한 기능 중 일부를 보여 줍니다.