HTTP 요청 헤더 및 IIS 서버 변수 설정

루슬란 야쿠셰프

설명서의 이 섹션은 IIS 7용 URL 다시 쓰기 모듈 버전 2.0에 적용됩니다.

이 연습에서는 URL 다시 쓰기 모듈 v 2.0을 사용하여 HTTP 요청 헤더 및 IIS 서버 변수를 설정하는 방법을 안내합니다.

사전 요구 사항

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

  1. ASP.NET 역할 서비스를 사용하도록 설정된 IIS 7.0 이상
  2. URL 다시 쓰기 모듈 2.0 설치됨

연습 시나리오 설정

URL 다시 쓰기 모듈 2.0을 사용하여 HTTP 헤더 및 IIS 서버 변수를 설정하는 방법을 보여 주려면 요청된 URL에 따라 요청에 대한 HTTP 쿠키 헤더가 설정되는 시나리오를 구현합니다. 예를 들어 지역화된 웹 페이지를 제공하는 웹 애플리케이션이 있다고 가정합니다. 웹 애플리케이션은 요청의 HTTP 쿠키를 기반으로 응답의 언어를 결정합니다. 이 방법의 문제는 검색 엔진 크롤러가 HTTP 쿠키를 사용하지 않으므로 기본 언어의 콘텐츠만 웹 애플리케이션에서 제공되므로 검색 엔진이 이 애플리케이션의 지역화된 콘텐츠를 인덱싱하지 않는다는 것입니다. 이 문제를 해결하려면 URL의 일부로 언어에 대한 정보를 추가하기로 결정합니다(예 http://www.contoso.com/default.aspx: ). 그런 다음 URL 다시 쓰기 모듈 2.0을 사용하여 응답에 대한 언어를 결정하기 위해 웹 애플리케이션에서 기대하는 쿠키를 설정합니다. 또한 원래 요청된 URI 문자열을 포함하는 ORIGINAL_URI 라는 다른 서버 변수를 설정하려고 합니다.

연습 시나리오를 설정하려면 다음 ASP.NET 코드를 복사하여 language.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 v2 Test - Setting Server Variables</title>
</head>
<body>
 <h1>Setting HTTP request header and a server variable with URL Rewrite Module v2</h1>
 <p>The value of the Language cookie is <strong><%=( Request.Cookies["Language"] != null ) ? Request.Cookies["Language"].Value : "Cookie not set" %></strong></p>
 <p>The originally requested URI is <strong><%= HttpUtility.HtmlEncode( Request.ServerVariables["ORIGINAL_URI"] ) %></strong></p>
</body>
</html>

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

다시 쓰기 규칙 만들기

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

http://localhost/<language>/anyfile.aspx
은 다음과 같이 다시 작성됩니다.
http://localhost/anyfile.aspx

다시 쓰기 규칙은 두 개의 IIS 서버 변수도 설정합니다.

  • HTTP_COOKIE
  • ORIGINAL_URI

IIS 관리자에서 URL 다시 쓰기 UI를 사용하여 다시 쓰기 규칙을 만듭니다.

IIS 관리자를 열고 왼쪽의 트리 뷰에서 "기본 웹 사이트"를 선택한 다음, "URL 다시 쓰기" 기능을 엽니다.

U R L 다시 쓰기 옵션에 포커스가 있는 I S Manager의 기본 웹 사이트 홈 화면 스크린샷

서버 변수 변경 허용

기본적으로 분산 재작성 규칙(예: 특정 사이트 또는 웹 애플리케이션에 대해 정의된 규칙)은 서버 변수가 "허용됨" 목록에 추가되지 않는 한 IIS 서버 변수를 설정하거나 변경할 수 없습니다. 이 연습에서는 다음 두 서버 변수를 "허용되는 서버 변수" 목록에 추가해야 합니다.

  • HTTP_COOKIE
  • ORIGINAL_URI

참고

"허용되는 서버 변수" 목록은 서버 수준에서 정의된 전역 규칙에는 적용되지 않습니다. 전역 다시 쓰기 규칙을 사용하여 서버 변수를 설정한 경우 서버 변수를 "허용됨" 목록에 추가할 필요가 없습니다.

"서버 변수 보기..."를 선택합니다. "작업" 창의 작업:

작업 창의 서버 변수 보기 옵션에 포커스가 있는 U RL 다시 쓰기 화면의 스크린샷

"추가..." 작업을 사용하여 HTTP_COOKIE 서버 변수를 추가하고 "허용되는 서버 변수" 목록에 ORIGINAL_URI.

서버 변수 이름으로 입력한 원본 밑줄 U R이 있는 서버 변수 추가 대화 상자의 스크린샷.

"허용되는 서버 변수" 목록이 업데이트된 후 "규칙으로 돌아가기" 작업을 클릭하여 규칙 목록 보기로 돌아갑니다.

다시 쓰기 맵 정의

다음 단계는 URL 부분을 매핑하는 데 사용할 재작성 맵을 정의하는 것입니다. 언어를 HTTP 쿠키 헤더에 다시 쓰기 규칙에 의해 저장되는 로캘 식별자에 나타냅니다.

"지도 다시 쓰기 보기..."를 선택합니다. "작업" 창의 작업:

작업 창의 맵 다시 쓰기 보기 옵션에 포커스가 있는 U RL 다시 쓰기 화면의 스크린샷

"다시 쓰기 맵 추가..."를 클릭합니다. 맵의 이름을 "언어"로 지정합니다.

다시 쓰기 맵 이름으로 입력된 언어가 있는 다시 쓰기 맵 추가 대화 상자의 스크린샷

이 맵은 언어를 나타내는 URL 부분과 HTTP 요청 쿠키를 설정할 때 사용할 로캘 식별자 간의 매핑을 정의합니다. "지도 설정 편집..."을 클릭합니다. 매핑을 찾을 수 없을 때 사용할 기본값을 지정하는 작업입니다. 기본값으로 "en_US"를 입력합니다.

맵에서 키를 찾을 수 없을 때 사용할 기본값으로 E N 밑줄 U를 보여 주는 맵 편집 대화 상자의 스크린샷

대화 상자를 닫고 "매핑 항목 추가..."를 사용합니다. 작업을 수행하여 다음 매핑을 추가합니다.

원래 값: 새 값:
fr-fr fr_FR
de-de de_DE
ru-ru ru_RU

다시 쓰기 규칙 정의

마지막으로 앞에서 정의한 다시 쓰기 맵을 사용하여 서버 변수를 설정하는 다시 쓰기 규칙을 만듭니다.

"규칙 추가..."를 클릭하여 "규칙 편집" 대화 상자를 표시합니다. 기본 기능 보기에서 작업을 수행하고 "인바운드 규칙" 범주에서 "빈 규칙"을 선택합니다. 아래와 같이 규칙 구성을 입력합니다.

이름, 일치 U R L, 조건, 서버 변수 및 작업 섹션을 보여 주는 인바운드 규칙 편집 화면의 스크린샷

  • 규칙 이름: "서버 변수 설정"

  • 요청된 URL: "패턴과 일치"

  • 사용: "정규식"

  • 패턴: "^([a-z]{2}-[a-z]{2})/(.*)"

  • 조건:

    • 입력: "{Languages:{R:1}}"
    • 형식: "패턴과 일치"
    • 패턴: "(.+)"
  • 작업:

    • 형식: "다시 쓰기"
    • URL 다시 쓰기: "{R:2}"

규칙의 패턴은 언어 세그먼트를 포함하는 모든 URL 경로와 일치합니다(예: http://www.contoso.com/de-de/default.aspx). 또한 규칙 백 참조에서 언어 세그먼트와 URL 경로의 나머지 부분을 캡처하므로 규칙의 뒷부분에서 다시 사용할 수 있습니다. 규칙 조건은 이전에 캡처한 언어 세그먼트를 다시 쓰기 맵 "Languages"에 전달되는 조회 키로 사용합니다. 맵 조회 결과는 조건 백 참조에 저장됩니다. 규칙 작업은 언어 세그먼트를 포함하지 않도록 URL을 다시 작성합니다.

"서버 변수..."를 확장합니다. 서버 변수를 설정하는 데 사용할 값을 지정합니다.

이름 필드에 H T T P 밑줄 COOKIE 및 ORIGINAL 밑줄 U R L이 입력된 서버 변수 대화 상자의 스크린샷

  • 이름: HTTP_COOKIE, 값: Language={C:1}
  • 이름: ORIGINAL_URI, 값: http://{HTTP_HOST}{REQUEST_URI}

HTTP 쿠키는 "언어" 다시 쓰기 맵에서 가져온 로캘 식별자를 포함하는 조건 백 참조를 사용하여 설정됩니다. ORIGINAL_URI 서버 변수의 값은 {HTTP_HOST} 및 {REQUEST_URI} 서버 변수를 사용하여 빌드됩니다.

"확인"을 클릭하여 대화 상자를 닫은 다음 오른쪽의 "작업" 창에서 "적용"을 클릭하여 규칙을 저장합니다.

규칙 테스트

규칙이 쿠키 및 서버 변수를 올바르게 설정하는지 테스트하려면 웹 브라우저를 열고 다음 URL을 요청합니다.

http://localhost/fr-fr/language.aspx

U R L 막대에 포커스가 있는 U R L 다시 쓰기 모듈 v 2 테스트 웹 페이지의 스크린샷, 언어 쿠키는 F R 밑줄 F R로 설정됩니다.

다시 쓰기 규칙이 요청된 URL에 따라 "언어" 쿠키를 설정한 것을 볼 수 있습니다. 또한 원래 URL 문자열은 "ORIGINAL_URI" 서버 변수를 통해 ASP.NET 페이지에 액세스할 수 있게 되었습니다.