티스토리 뷰

728x90
반응형

 포스팅은 Apache의 mod_rewrite를 대체한 WebtoB의 URLRewrite에 대해 알아보겠습니다.


URL Rewrite 는 Apache의 mod_rewrite를 WebtoB에 포팅한 기능으로, rule-based URL rewriting 기능을 제공한다.


URLRewrite 설정 및 확인 방법

1. 개념

1.1 URLRewrite ?

 Client Requtest Header URL을 관리자가 목적에 맞게 변경하여 Client에게 응답할 수 있는 기능입니다.

 Apache mod_rewrite WebtoB에 포팅한 기능으로 rule-based URL rewriting 기능을 제공합니다.

 자주 사용되는 조건 설명

 조건

 설명

 ^

 시작문자가 일치해야 한다.

 $

 종료문자가 일치해야 한다.

 OR

 RewriteCond 다음에  다른 RewriteCond 있을 경우다음 RewriteCond logical OR 조합되도록 설정한다.

 R

 Substitution Absolute URL 경우hostname 서버의 호스트와 일치하는 경우에도 강제로 다시 redirect하도록 한다.

 L

 rewriting 과정을 이곳에서 종료하도록 한다.


1.1.1 WebtoB
에서 설정 (맑은고딕/10pt/
Bold)

 URLRewrite 기능을 사용하기 위해서는 NODE 절의 'URLRewrite' 항목은 'Y'로 설정되어야 하고 URLRewriteConfig 항목에 Condition Rule에 관련된 설정을 해야 합니다.

 다음은 URLRewrite 기능을 사용하기 위한 NODE 절 설정에 대한 예제입니다.

*NODE

mynode             URLRewrite = Y,

 URLRewriteConfig = "${WEBTOBDIR}/config/rewrite.conf"


1.1.2 Rewriteconfig

 Rewriteconfig 파일에는 RewriteCond, RewriteRule을 설정하며, RewriteCond는 rewriting 조건을 명시하고, RewriteRule rewriting 동작을 결정합니다.

 RewriteCond 구조

- RewriteCond rewriting 조건을 명시하며다음과 같은 형식으로 설정한다. TestString CondPattern을 매칭하여 조건이 맞을 경우, RewriteRule 설정대로 해당되는 패턴을 교체합니다

- RewriteCond <TestString> <CondPattern> flags

- <TestString>에는 예약어와 일반 문자열을 사용 할 수 있는데 자세한 내용은 manual을 참고합니다대표적으로 host name을 매치 시킬 경우 %{HTTP_HOST} 를 사용합니다.

- <CondPattern> 는 실제로 매칭할 문자를 입력합니다.

- flags 다수의 호스트를 매칭하길 원할 경우 OR을 사용해 다음과 같이 설정 할 수 있습니다.

RewriteCond %{HTTP_HOST} ^host1.* [OR]

RewriteCond %{HTTP_HOST} ^host2.* [OR]

RewriteCond %{HTTP_HOST} ^host3.*

RewriteRule ...

 RewriteRule 구조

사용자 요청이 RewriteCond에 매칭되는 경우, RewriteRule 설정에 의해 사용자 요청 중 Pattern Substitution으로 교체합니다.

- RewriteRule <Pattern> <Substitution> flags

- <Pattern> . 은 요청 uri 전체를 Substitution으로 대체합니다.

예를 들어 다음과 같은 상황에서 요청된 www.tmax.com www.google.com로 대체됩니다.

RewriteCond %{HTTP_HOST} www.tmax.com$

RewriteRule . www.google.com [L]

요청 URI domain:port 인 경우 <Pattern> ^/$ 를 통해 “/” 매치해서 redirect 설정을 할 수 있지만 domain:port/uri/ 과 같을 경우 <Pattern>에 “.” 설정하고 뒤에는 Full hostname을 명시해주는 것이 좋습니다.

 자세한 내용은 아래 “Apache 2.2 mod_rewrite”를 참고하도록 한다(WebtoB에서 동작하지 않는 기능이 있을 수 있으니 유의해야 합니다.) http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

 아래는 예제관련 링크로 참고하도록 합니다: http://httpd.apache.org/docs/2.2/misc/rewriteguide.html)


1.1.3 인입된 http request에 대해 https 분기 방법

- domaintest.co.kr이며, port80인 경우 모든 url에 대해서 https://test.co.kr로 분기

- ^test : 첫 문자가 test로 시작

- kr$ : 문자열의 끝이 kr

RewriteCond %{HTTP_HOST} ^test\.co\.kr$

RewriteCond %{SERVER_PORT} 80

RewriteRule . https://test.co.kr%{REQUEST_URI} [L]

 

1.1.4 특정 URI에 대해 타 URL Redirect 처리 방법

- http://test.co.kr/test/ 요청에 대해 , https://test. co.kr/test2/ 로 분기

- ( ) : ( ) 안의 문자 또는 문자열을 그룹으로 묶으며, 이 문자그룹은 $N 의 변수로 활용

- . : 다수의 한 문자

- * : 0개 이상의 문자 또는 문자열- $N : RewriteRule의 패턴 중 N번째 그룹 패턴을 지칭

RewriteCond %{HTTP_HOST} ^test\.co\.kr$

RewriteCond %{SERVER_PORT} 80

RewriteRule /test/(.*) https://test.co.kr/test2/$1 [L]


◇ 설정예제

1. tmax1.tmax.co.kr로 들어오는 요청을 http://www.google.com 로 redirect 할 때

RewriteCond %{HTTP_HOST} ^tmax1.tmax.co.kr$   // 앞에 ^ 뒤에 $ 는 정확한 매칭이 필요할 경우 넣는다. 빼면 이외에도 적용

RewriteRule . http://www.google.com [L] 

2. tmax1.tmax.co.kr:26000/ 으로 들어오는 모든 요청에 대해 tmax1.tmax.co.kr:26000/session/index.jsp로 redirect 할 때

RewriteCond %{HTTP_HOST} ^tmax1.tmax.co.kr:26000$

RewriteRule ^/$ /session/index.jsp [R,L] 

3. tmax1.tmax.co.kr:26000/session/ 요청에 대해 http://www.google.com 로 redirect 할 때

RewriteCond %{HTTP_HOST} ^tmax1.tmax.co.kr

RewriteCond %{SERVER_PORT} 26000$

RewriteCond %{REQUEST_URI} ^/session/$

RewriteRule . http://www.google.com [L]

4. tmax1.tmax.co.kr:26000/session/ 요청에 대해 tmax1.tmax.co.kr:26000/session/index.jsp 로 redirect 할 때

RewriteCond %{HTTP_HOST} tmax1.tmax.co.kr:26000$

RewriteCond %{REQUEST_URI} ^/session/$

RewriteRule . http://tmax1.tmax.co.kr:26000/session/index.jsp [R,L]

 * URL Rewrite 설정 시 유용한 Tool (Debug Tool)

1. online에서 사용자가 작성한 URL Rewrite를 검증할 수 있는 사이트 : http://htaccess.madewithlove.be/

2.Chrome 앱에 “RegExp tester“라는 Utility 가 존재합니다.

사용방법은 간단하니 유용하게 사용하시기 바랍니다.

아래 이미지는 htaccess 샘플입니다.

고맙습니다.


728x90
반응형