Apache mod_rewrite 규칙 가져오기

루슬란 야쿠셰프

소개

IIS 7 이상의 URL 다시 쓰기 모듈은 Apache mod_rewrite 규칙을 IIS URL 다시 쓰기 규칙으로 변환하는 프로세스를 크게 간소화하는 가져오기 기능을 제공합니다. 이 연습에서는 URL 다시 쓰기 모듈에 제공된 규칙 가져오기 기능을 사용하여 여러 mod_rewrite 규칙을 IIS 구성 파일로 가져옵니다. URL 다시 쓰기 모듈을 아직 다운로드하지 않은 경우 .https://www.iis.net/downloads/microsoft/url-rewrite

연습 시나리오 설정

mod_rewrite 규칙을 변환하고 변환된 규칙이 제대로 작동하는지 확인하는 방법을 보려면 웹 사이트에 정식 호스트 이름을 적용하는 일반적인 시나리오를 구현합니다. 이 예제에서는 요청이 수행될 때 이외의 www.mysite.com호스트 이름을 사용하는 요청을 정식 호스트 이름으로 리디렉션할 수 있도록 대신 강제로 사용합니다.www.mysite.commysite.com

  1. IIS 관리자를 시작한 다음 기본 웹 사이트를 클릭합니다.

  2. 작업 창에서 바인딩을 클릭하고 포트 8088에 대한 새 http 바인딩을 추가합니다.

    작업 창에서 사이트 편집 아래의 바인딩을 클릭한 후의 사이트 바인딩 대화 상자 스크린샷그림 1: 새 바인딩 추가

  3. 메모장 사용하여 파일 끝에 다음 두 줄을 열고 %SystemDrive%\windows\system32\drivers\etc\hosts 추가합니다.

    127.0.0.1 www_mysite_com
    127.0.0.1 mysite_com
    

    do기본 구분 기호에 대해 "." 대신 "_"를 사용하고 있습니다. 이는 웹 브라우저가 DNS(Do기본 Name System) 서버를 사용하여 do기본 이름을 확인하려고 하지 않도록 하기 위한 것입니다.

  4. 호스트 파일을 저장합니다.

  5. 웹 브라우저를 열고 사이트 http://www_mysite_com/iisstart.htm 로 이동하여 호스트 이름이 올바르게 설정되었는지 확인합니다 http://mysite_com/iisstart.htm.

mod_rewrite 규칙 변환

정식 호스트 이름을 적용하는 데 사용할 Apache mod_rewrite 규칙은 다음과 같습니다.

#For sites running on a port other than 80:
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*)         http://www_mysite_com:%{SERVER_PORT}/$1 [L,R]

#And for a site running on port 80
RewriteCond %{HTTP_HOST}   !^www_mysite_com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://www_mysite_com/$1 [L,R]

이러한 규칙을 IIS URL 재작성 형식으로 변환하려면 다음을 수행합니다.

  1. IIS 관리자를 시작합니다.

  2. 왼쪽의 커넥트 창에서 기본 웹 사이트를 선택합니다.

  3. 오른쪽의 기능 보기에서 URL 다시 쓰기를 클릭합니다.

    U R L 다시 쓰기가 선택된 기본 웹 사이트 홈 창의 스크린샷

    그림 2: URL 다시 쓰기 클릭

  4. 오른쪽의 작업 창에서 규칙 가져오기를 클릭합니다.

  5. 위의 예제 mod_rewrite 규칙을 복사하여 다시 쓰기 규칙 텍스트 상자에 붙여넣습니다.

    다시 쓰기 규칙 집합 및 성공적으로 변환된 규칙 집합이 있는 가져오기 모드 밑줄 다시 쓰기 규칙 창의 스크린샷

    그림 3: 가져올 규칙

  6. 변환된 규칙 상자의 트리 뷰 탭에는 변환 결과가 즉시 표시됩니다. XML 보기 탭을 클릭하여 Web.config 파일에 규칙이 저장되는 방법을 확인할 수도 있습니다.

    변환된 규칙 섹션의 트리 뷰와 X ML 뷰 간 전환 스크린샷

    그림 4: 변환된 규칙

    트리 뷰다시 전환하고 노드를 선택하면 다시 쓰기 규칙 텍스트 상자의 해당 mod_rewrite 규칙 지시문이 강조 표시됩니다.

    변환된 규칙의 트리 뷰에서 선택한 노드의 스크린샷

    그림 5: 트리 뷰

    규칙 변환 중에 규칙에 기본 이름이 할당되었습니다. 기본 이름을 더 의미 있는 이름으로 변경하려면 트리 뷰에서 규칙을 선택하고 마우스 오른쪽 단추로 클릭한 다음 상황에 맞는 메뉴에서 이름 바꾸기를 선택합니다.

    변환된 규칙을 마우스 오른쪽 단추로 클릭하여 규칙 이름을 바꾸는 스크린샷

    그림 6: 이름 바꾸기

    첫 번째 규칙의 이름을 ImportedRule1에서 www_mysite_com:non-80으로 리디렉션으로 변경합니다. 두 번째 규칙의 이름을 ImportedRule2 에서 www_mysite_com:80으로 리디렉션으로 변경합니다.

    작업 창에서 적용클릭하여 변환된 규칙을 Web.config 파일에 저장한 다음 규칙으로 돌아가기를 클릭합니다.

    적용, 취소 및 규칙으로 돌아가기가 강조 표시된 작업 창의 스크린샷.

    그림 7: 규칙으로 돌아가기

변환된 규칙 테스트

mod_rewrite 형식에서 가져온 규칙이 올바르게 작동하는지 테스트하려면 웹 브라우저를 열고 다음 URL 중 하나로 이동합니다.

  • http://localhost/iisstart.htm
  • http://mysite_com/iisstart.htm

두 경우 모두 웹 브라우저가 .로 http://www_mysite_com/iisstart.htm리디렉션됩니다.

또한 다음 URL 중 하나를 시도하는 경우:

  • http://localhost:8088/iisstart.htm
  • http://mysite_com:8088/iisstart.htm

웹 브라우저가 .로 http://www_mysite_com:8088/iisstart.htm리디렉션됩니다.

mod_rewrite 가져온 규칙은 웹 사이트에 대한 정식 호스트 이름을 적용할 수 있도록 설정했습니다. Bing 검색은 Apache mod_rewrite 규칙의 다른 예를 표시합니다.

부인

중요 - URL 다시 쓰기 모듈은 Apache mod_rewrite 규칙을 기능적으로 동등한 IIS URL 다시 쓰기 규칙으로 변환하려고 시도합니다. 그러나 Apache와 IIS 간의 아키텍처 차이로 인해 모든 mod_rewrite 규칙을 변환할 수 있는 것은 아닙니다. 변환 프로세스를 시작하기 전에 해당 기능을 이해할 때까지 mod_rewrite 규칙 집합을 연구하는 것이 좋습니다. 그런 다음 IIS URL 다시 쓰기 규칙으로 변환한 후 변환 결과를 검토하고 테스트하여 해당 IIS 다시 쓰기 규칙 집합이 동일한 URL 다시 쓰기 논리를 제공하는지 확인합니다.

Apache mod_rewrite 구문을 따르는 규칙만 변환할 수 있습니다. 다시 쓰기 규칙의 다른 형식(예: ISAPI_Rewrite, Ionic ISAPI Rewrite, IISRewrite 등)은 인식되지 않거나 잘못 변환됩니다.