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.com
mysite.com
IIS 관리자를 시작한 다음 기본 웹 사이트를 클릭합니다.
작업 창에서 바인딩을 클릭하고 포트 8088에 대한 새 http 바인딩을 추가합니다.
그림 1: 새 바인딩 추가
메모장 사용하여 파일 끝에 다음 두 줄을 열고
%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기본 이름을 확인하려고 하지 않도록 하기 위한 것입니다.
호스트 파일을 저장합니다.
웹 브라우저를 열고 사이트
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 재작성 형식으로 변환하려면 다음을 수행합니다.
IIS 관리자를 시작합니다.
왼쪽의 커넥트 창에서 기본 웹 사이트를 선택합니다.
오른쪽의 기능 보기에서 URL 다시 쓰기를 클릭합니다.
그림 2: URL 다시 쓰기 클릭
오른쪽의 작업 창에서 규칙 가져오기를 클릭합니다.
위의 예제 mod_rewrite 규칙을 복사하여 다시 쓰기 규칙 텍스트 상자에 붙여넣습니다.
그림 3: 가져올 규칙
변환된 규칙 상자의 트리 뷰 탭에는 변환 결과가 즉시 표시됩니다. XML 보기 탭을 클릭하여 Web.config 파일에 규칙이 저장되는 방법을 확인할 수도 있습니다.
그림 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 등)은 인식되지 않거나 잘못 변환됩니다.