URL 다시 쓰기 모듈에 대한 아웃바운드 규칙 만들기
설명서의 이 섹션은 IIS 7용 URL 다시 쓰기 모듈 버전 2.0에 적용됩니다.
이 연습에서는 URL 다시 쓰기 모듈 2.0에 대한 아웃바운드 다시 쓰기 규칙을 만들고 테스트하는 방법을 안내합니다.
사전 요구 사항
이 연습을 수행하려면 다음 필수 구성 요소가 필요합니다.
- ASP.NET 역할 서비스를 사용하도록 설정된 IIS 7 이상;
- URL 다시 쓰기 모듈 2.0 RC 릴리스가 설치되었습니다.
테스트 웹 페이지 설정
URL 다시 쓰기 모듈 2의 작동 방식을 보여 주려면 간단한 ASP.NET 페이지를 사용합니다. 이 페이지는 웹 서버 변수를 읽고 브라우저에 해당 값을 표시합니다. 또한 서버 변수를 사용하여 하이퍼링크를 생성한 다음 해당 링크를 응답 HTML에 넣습니다.
테스트 페이지를 만들려면
다음 폴더에 article.aspx라는 파일을 만듭니다.
%SystemDrive%\inetpub\wwwroot\
다음 ASP.NET 태그를 복사하여 파일에 붙여넣고 파일을 저장합니다.
<%@ 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 v2 Test</title> </head> <body> <h1>URL Rewrite Module v2 Test Page</h1> <h2>Inbound URL Rewriting</h2> <table> <tr> <th>Server Variable</th> <th>Value</th> </tr> <tr> <td>Original URL: </td> <td><%= Request.ServerVariables["UNENCODED_URL"] %></td> </tr> <tr> <td>Final URL: </td> <td><%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %></td> </tr> </table> <h2>Outbound URL Rewriting</h2> <a href="<%= Request.ServerVariables["SCRIPT_NAME"] + "?" + Request.ServerVariables["QUERY_STRING"] %>">Here</a> is the link to this article. </body> </html>
웹 브라우저를 열고 다음 URL을 요청하여 페이지가 올바르게 렌더링되는지 확인합니다.
http://localhost/article.aspx
인바운드 다시 쓰기 규칙 추가
다음 단계는 다음 형식의 URL을 다시 작성하는 규칙을 추가하는 것입니다.
http://localhost/article/342/some-article-title
이러한 URL은 다음과 같은 형식으로 다시 작성됩니다.
http://localhost/article.aspx?id=342&title=some-article-title
인바운드 다시 쓰기 규칙을 추가하려면 다음을 수행합니다.
다음 위치에 있는 web.config 파일을 엽니다.
%SystemDrive%\inetpub\wwwroot\
/configuration/system.webServer 요소 아래에 다음을 추가한 다음 파일을 저장합니다.
<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>
인바운드 다시 쓰기 규칙을 만드는 방법에 대한 자세한 내용은 URL 다시 쓰기 모듈에 대한 다시 쓰기 규칙 만들기를 참조하세요.
인바운드 다시 쓰기 규칙 테스트
이제 인바운드 다시 쓰기 규칙이 설계된 대로 작동하는지 테스트할 수 있습니다.
인바운드 다시 쓰기 규칙을 테스트하려면 다음을 수행합니다.
웹 브라우저를 열고 다음 URL을 요청합니다.
http://localhost/article/342/some-article-title
다시 쓰기 규칙이 올바르게 작동하는 경우 다음과 같은 응답 형식의 서버가 표시됩니다.
인바운드 규칙 때문에 간단하고 사용자에게 친숙한 URL 구조를 사용하여 이 웹 페이지에 액세스할 수 있음을 알 수 있습니다. 그러나 사용자가 HTML 페이지 내의 하이퍼링크를 클릭하면 웹 브라우저에서 쿼리 문자열 매개 변수가 있는 URL이 사용됩니다. 이는 다음과 같은 여러 가지 이유로 바람직하지 않습니다.
- 웹 사이트 방문자는 URL 다시 쓰기 규칙을 사용하여 숨기려는 내부 URL 구조를 볼 수 있습니다.
- 검색 엔진 최적화에 적합하지 않은 여러 URL로 동일한 페이지에 액세스할 수 있습니다.
이 문제를 해결하는 가장 간단한 방법은 간단한 링크 구조를 사용하도록 HTML 페이지를 수정하는 것입니다. 그러나 대부분의 경우 이것이 불가능합니다. 예를 들어 수정할 수 없는 복잡한 레거시 웹 애플리케이션 또는 웹 애플리케이션이 이미 있는 경우 애플리케이션의 모든 URL 링크를 수정하는 작업은 시간이 많이 걸리거나 전혀 불가능할 수 있습니다.
아웃바운드 URL 다시 쓰기가 도움이 될 수 있는 경우입니다. 아웃바운드 URL 다시 쓰기는 애플리케이션에서 생성된 응답에서 즉시 링크를 수정할 수 있습니다.
아웃바운드 다시 쓰기 규칙 만들기
이제 HTML 응답에서 URL을 변경하는 아웃바운드 다시 쓰기 규칙을 만듭니다. 규칙은 다음 형식의 URL을 변경합니다.
http://localhost/article.aspx?id=342&title=some-article-title
이러한 URL은 다음과 같이 다시 작성됩니다.
http://localhost/article/342/some-article-title
IIS 관리자에서 URL 다시 쓰기 사용자 인터페이스를 사용하여 아웃바운드 규칙을 만듭니다.
아웃바운드 규칙을 만들려면 다음을 수행합니다.
- IIS 관리자 열기
- "기본 웹 사이트"를 선택합니다.
- 기능 보기에서 "URL 다시 쓰기"를 선택합니다.
- 오른쪽의 작업 창에서 "규칙 추가..."를 클릭합니다. "규칙 추가" 대화 상자의 "아웃바운드 규칙" 범주에서 "빈 규칙"을 선택하고 확인을 클릭합니다.
이제 실제 아웃바운드 규칙을 정의해야 합니다. URL 재작성 모듈 2.0에서 아웃바운드 다시 쓰기 규칙은 다음 정보를 지정하여 정의됩니다.
- 규칙의 이름입니다.
- 이 규칙을 응답에 적용할지 여부를 제어하는 선택적 사전 조건입니다.
- 응답에서 문자열을 일치시키는 데 사용할 패턴입니다.
- 선택적 조건 집합입니다.
- 패턴이 일치하고 모든 조건 검사가 성공하면 수행할 작업입니다.
규칙 이름 지정
"이름" 텍스트 상자에 규칙을 고유하게 식별하는 이름을 입력합니다(예: "URL을 클린 다시 쓰기").
사전 조건 정의
사전 조건은 응답에서 아웃바운드 규칙 평가를 수행해야 하는지 여부를 평가하는 데 사용됩니다. 예를 들어 HTML 콘텐츠를 수정하는 규칙의 경우 콘텐츠 형식 헤더가 "text/html"로 설정된 HTTP 응답만 이 규칙에 대해 평가해야 합니다. 아웃바운드 규칙 평가 및 콘텐츠 다시 쓰기는 웹 애플리케이션의 성능에 부정적인 영향을 줄 수 있는 CPU 집약적 작업입니다. 따라서 사전 조건을 사용하여 아웃바운드 규칙이 적용되는 경우의 범위를 좁힐 수 있습니다.
만드는 규칙은 HTML 응답에만 적용되어야 하므로 HTTP 응답 헤더 콘텐츠 형식 이 "text/html"에 같은지 여부를 확인하는 전제 조건을 정의합니다.
사전 조건을 정의하려면 다음을 수행합니다.
사전 조건 목록에서 "<새 사전 조건> 만들기"를 선택합니다.
이렇게 하면 사전 조건 편집기 대화 상자로 이동하여 사전 조건을 정의해야 합니다. 다음과 같이 사전 조건 설정을 지정합니다.
이름: "IsHTML"
사용: "정규식"
"추가"를 클릭하여 "조건 추가" 대화 상자를 표시합니다. 이 대화 상자에서 다음을 지정합니다.
조건 입력: "{RESPONSE_CONTENT_TYPE}"
입력 문자열 확인: "패턴과 일치"
패턴: "^text/html"
확인을 클릭하여 사전 조건을 저장하고 "규칙 편집" 페이지로 돌아갑니다.
일치하는 scope 정의
아웃바운드 다시 쓰기 규칙은 HTTP 헤더의 콘텐츠 또는 응답 본문 콘텐츠에서 작동할 수 있습니다. 이 규칙은 응답 콘텐츠의 링크를 바꿔야 하므로 "일치 범위" 드롭다운 목록에서 "응답"을 선택합니다.
태그 필터 정의
태그 필터는 규칙의 패턴에 대해 전체 응답을 평가하는 대신 특정 HTML 요소에만 일치하는 패턴을 scope 데 사용됩니다. 패턴 일치는 매우 CPU 집약적인 작업이며 전체 응답이 패턴에 대해 평가되는 경우 웹 애플리케이션 응답 시간이 크게 느려질 수 있습니다. 태그 필터를 사용하면 패턴 일치가 특정 HTML 태그의 콘텐츠 내에서만 적용되도록 지정할 수 있으므로 정규식 패턴에 대해 평가해야 하는 데이터의 양을 크게 줄일 수 있습니다.
태그 필터를 정의하려면 드롭다운 목록 "내 콘텐츠 일치: " 를 확장한 다음 검사 상자 "A(href 특성)"를 선택하고 검사.
이렇게 하면 다음 예제와 같이 하이퍼링크의 href 특성 값에만 패턴을 적용하는 규칙이 설정됩니다.
<a href="this string will be used for pattern matching">Some link</a>
패턴 정의
"패턴" 텍스트 상자에 다음 문자열을 입력합니다.
^/article\.aspx\?id=([0-9]+)(?:&|&)title=([_0-9a-z-]+)$
이 문자열은 패턴이 다음 조건을 충족하는 URL 문자열과 일치하게 지정하는 정규식입니다.
- 문자 시퀀스 "/article.aspx?"로 시작합니다.
- 숫자 값이 있는 첫 번째 쿼리 문자열 매개 변수를 포함합니다.
- 영숫자 값이 있는 두 번째 쿼리 문자열 매개 변수를 포함합니다.
정규식의 특정 부분이 괄호 안에 있습니다. 이러한 괄호는 나중에 백 참조를 사용하여 규칙에서 참조할 수 있는 캡처 그룹을 만듭니다. 또한 대부분의 경우 "&" 기호는 응답에서 HTML로 인코딩되므로 정규식 패턴이 이를 고려해야 합니다.
작업 정의
"작업" 그룹 상자에서 "다시 쓰기" 작업 유형을 선택합니다. "값" 텍스트 상자에 다음 문자열을 입력합니다.
/article/{R:1}/{R:2}
이 문자열은 링크 주소를 다시 작성할 새 값을 지정합니다. 쿼리 문자열 매개 변수의 값에 대해 식은 괄호를 사용하여 규칙 패턴에 정의된 캡처 그룹에 대한 백 참조인 {R:1} 및 {R:2}을 사용합니다.
다른 모든 설정에 대한 기본값을 그대로 둡니다. "규칙 편집" 속성 페이지는 다음 페이지와 같습니다.
오른쪽에서 "적용" 작업을 클릭하여 규칙을 저장합니다.
구성 파일에서 다시 쓰기 규칙 보기
다시 쓰기 규칙은 aplicationHost.config 파일 또는 web.config 파일에 저장됩니다. 방금 만든 규칙의 구성을 검사 web.config 파일을 엽니다.
%SystemDrive%\inetput\wwwroot\
이 파일에는 다음 예제와 같이 모든 규칙 정의가 포함된 섹션이 표시됩니다 <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>
<outboundRules>
<rule name="Rewrite to clean URL" preCondition="IsHTML">
<match filterByTags="A" pattern="^/article\.aspx\?id=([0-9]+)(?:&|&amp;)title=([_0-9a-z-]+)$" />
<action type="Rewrite" value="/article/{R:1}/{R:2}" />
</rule>
<preConditions>
<preCondition name="IsHTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
규칙 테스트
이제 규칙이 URL을 올바르게 다시 작성하는지 테스트할 수 있습니다. 웹 브라우저를 열고 다음 URL을 요청합니다.
http://localhost/article/342/some-article-title
아웃바운드 다시 쓰기 규칙이 HTML 응답 내에서 링크를 변경한 것을 볼 수 있습니다.
이제 사이트 방문자가 이 링크를 클릭하면 클린 URL 형식이 사용되고 이 페이지에서 사용하는 내부 URL 표현이 표시되지 않습니다.
요약
이 연습에서는 IIS 관리자를 사용하거나 web.config 파일을 수동으로 편집하여 URL 다시 쓰기 모듈 2.0에서 아웃바운드 다시 쓰기 규칙을 구성하는 방법을 알아보았습니다. 이 연습에서 만든 규칙은 아웃바운드 다시 쓰기, 사전 조건 및 태그 필터와 같은 URL 다시 쓰기 모듈 2.0의 중요한 기능 중 일부를 보여 줍니다.