- rewrite 모듈을 사용하기 위한 Apache 컴파일옵션 
 Rewrite 모듈을 쓰기 위한 Apache 컴파일 옵션은- –enable-rewrite입니다.
 Configure 실행 시에- –enable-rewrite만 추가하면 Apache에서 rewrite 모듈을 사용할 수 있게 됩니다.- ./cofigure prefix=/usr/local/apache2 –enable-rewrite make make install
- Rewrite 를 적용할 수 있는 범위 
 Rewrite 설정은- Server Config,- Virtual Host,- Directory,- .htaccess에 설정할 수 있습니다.
 즉 Apache 서버 전체에 Global 설정과 특정 가상호스트에만 적용하도록 할수 있고 특정 디렉토리에만 적용시킬수도 있습니다.
- .htaccess란? - .htaccess (hypertext access)는 Apache 웹 서버의 디렉토리 레벨을 설정하는 기본 파일입니다.- .htaccess는 한 특정 디렉토리에 위치하며, 모든 하위 디렉토리를 포함한 해당 디렉토리에 영향을 미칩니다.
 이 파일이 위치한 특정 폴더에 사용자가 정의한 Request 기능을 적용합니다.
 파일 이름은- .(dot)으로 시작하기 때문에 유닉스 계열의 운영체제에서는 숨김 파일로 저장됩니다.
- Rewrite 모듈 지시자 - RewriteEngine - 설정 문법: RewriteEngine On|Off
- Rewriteing 엔진을 사용할지 여부를 설정합니다.
 기본설정은 당연히 Off로 되어 있으며RewriteEngine On으로 설정하지 않는 이상 Rewritng 엔진을 활성화하지 않습니다.
 현재 Apache에서 실행 중인 모든 RewriteRule을 비활성화시킬 때 RewriteRule 라인을 주석처리 하기보다RewriteEngin Off로 설정하는 것이 더 간편하고 올바른 방법입니다.
 
- 설정 문법: 
- RewriteLog - 설정 문법: RewriteLog FILE-PATH
- RewriteLog 지시자는 Rewrite 엔진의 로그를 기록할 파일을 지정합니다.
 RewriteLog 파일을 항상 남기기보다 잘못된 Rewrite 규칙들을 디버깅할 때 사용하기를 권장합니다.
 아파치와 마찬가지로 RewriteLog 파일도 방문자 수가많은 사이트에서는 감당하지 못할 정도의 로그 파일을 남기기 때문에 시스템 여유 공간이 많이 없는 시스템에서는 해당 파티션의 하드 사용률 100%로 인한 재앙(?)을 불러올 수도 있습니다.
 RewriteLog 지시자는 반드시 RewriteLogLevel 지시자와 함께 사용하여야 합니다.
 
- 설정 문법: 
- RewriteLogLevel - 설정 문법: RewriteLogLevel Level
- RewriteLogLevel 지시자는 RewriteLog 지시자로 설정한 로그 파일에 기록할 로그들에 대해 얼마나 자세한 내용을 로그로 남길 것인가에 대해 설정하는 지시자입니다.
 기록할 로그 Level은 0 ~ 9까지 사용할 수 있으며 0은 로그를 기록하지 않겠다는 의미입니다. Level 숫자가 높을수록 자세한 로그를 기록합니다.
 
- 설정 문법: 
- RewriteCond - 설정 문법: RewriteCond TestStirng CondPattern
- RewriteCond 지시자는 RewriteRule 과 함께 사용되는 규칙으로 RewriteCond 다음에 오는 RewriteRule은 RewrieteCond에서 설정한 패턴과 일치해야지만 RewriteRule들을 실행한다.
 
- 설정 문법: 
- RewriteRule - 설정 문법: RewriteRule Pattern Substitution
- Rewrite 모듈의 실질적인 Rewrite 규칙들을 적용하는 지시자입니다.
 Pattern(Input URL)을 Substitution(Return URL)로 변경하기 위한 모든 규칙은 이 지시자를 사용해서 설정해야 합니다.
 Pattern(Input URL)에는 Perl 정규표현 식을 사용할 수 있기 때문에 Input URL의 규칙을 유연하게 적용할 수 있습니다.
 
- 설정 문법: 
 
- RewriteEngine 
- RewriteRule 에서 사용되는 정규 표현식의 기초 - .: 다수의 한문자
- ?: 0개 이상의 한문자
- *: 0개 이상의 문자 또는 문자열
- +: 1개 이상의 문자 또는 문자열
- (chars):- (, )안의 문자또는 문자열을 그룹으로 묶습니다. 이 문자그룹은 Substitution(return URL)에서- $N의 변수로 활용할수 있습니니다.
- ^: 문자열의 첫문(열)을 지정합니다.
- $: 문자열의 끝 문자(열)을 지정합니다.
- \(역슬래쉬): 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거합니다.(예:- (, ), [, ] .등)
- {n}: 정확히 n번 반복
- {n,}: n번 이상 반복
- {n,m}: n 이상 m 이하 반복
- [chars]: 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.- 예) [a-z]: a 부터 z 까지의 소문자
- 예) [tT]: 소문자 t 또는 대문자 T
 
- 예) 
 
- 정규표현식 단축표현들 - [:alpha:]: 알파벳.- [a-zA-Z]와 같은 표현
- [:alnum:]: 알파벳과 숫자.- [a-zA-Z0-9]와 같은 표현
- [:digit:]: 숫자- [0-9]와 같은 표현
- [:upper:]: 대문자.- [A-Z]와 같은 표현
 
- 사용가능한 서버변수 - [HTTP Headers] - HTTP_USER_AGENT
- HTTP_REFERER
- HTTP_COOKIE
- HTTP_FORWARDED
- HTTP_HOST
- HTTP_PROXY_CONNECTION
- HTTP_ACCEPT
 
- [connection & request] - REMOTE_ADDR
- REMOTE_HOST
- REMOTE_PORT
- REMOTE_USER
- REMOTE_IDENT
- REQUEST_METHOD
- SCRIPT_FILENAME
- PATH_INFO
- QUERY_STRING
- AUTH_TYPE
 
- [server internals] - DOCUMENT_ROOT
- SERVER_ADMIN
- SERVER_NAME
- SERVER_ADDR
- SERVER_PORT
- SERVER_PROTOCOL
- SERVER_SOFTWARE
 
- [date and time] - TIME_YEAR
- TIME_MON
- TIME_DAY
- TIME_HOUR
- TIME_MIN
- TIME_SEC
- TIME_WDAY
- TIME
 
- [specials] - API_VERSION
- THE_REQUEST
- REQUEST_URI
- REQUEST_FILENAME
- IS_SUBREQ
- HTTPS
 
 
- [HTTP Headers] 
- RewriteCond에서 쓰이는 명령어 - -d: 디렉터리를 의미합니다. TestString이 디렉터리를 가리키거나 포함하고 있을 때 처리됩니다.
- -f: 파일을 의미합니다. TestString이 파일을 가리키거나 포함하고 있을 때 처리됩니다.
- -l: 심볼릭링크를 의미합니다. TestString이 심볼릭링크를 가리키거나 포함하고 있을 때 처리됩니다.
- !: 느낌표(!)는 부정을 뜻합니다.- # 파일이 아닌 경우 RewriteCond %{REQUEST_FILENAME} !-f # 디렉토리가 아닌 경우 RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://test.domain.co.kr/$1
 
- RewriteRule 플래그 - forbidden|F- 요청하는 페이지를 403 에러로 redirect 시킵니다.
- RedirectRule 이 적용되고 있는 페이지를 일시적으로 사용중단을 시키거나 사용자가 페이지 접근을 할 수 없게 할 때 사용합니다. - RewriteRule ^/test /home/blog/html/test.php [F]
- 사용자가 /test로 접근할 경우 403 에러를 보냅니다.
 
- gone|G- 요청하는 페이지를 410 에러로 redirect 시킵니다.
- 410 에러는 페이지가 사라졌거나 존재하지 않는다는 메시지입니다.
 이것도 forbidden과 마찬가지로 RedirectRule 이 적용되던 페이지를 일시적으로 중단시킬 때 유용하게 사용할 수 있습니다.
 
- last|L- 이 플래그가 적용되면 뒤에 어떤 룰이 있더라도 이룰 아래의 규칙들은 적용되지 않고 RewriteRule 을 빠져나가게 됩니다.
- C, Perl, PHP 프로그램에서 루프를 빠져나가는 break 와 같은 의미를 가집니다.
 
- chain|C- 이 플래그의 결과를 다음 RewriteRule 의 input 값으로 사용합니다.
 - RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.domain\.com(.*) /home/$1/public_html$2- 이 룰은 사용자 홈의 도메인을 2차 도메인으로 자동설정해 줄 때 많이 쓰는 룰입니다.
- RewriteRule의 input은 도메인을 제외한 URI를 인식하기 때문에 도메인까지 인식을 시켜서 다음 RewriteRule 로 체크를 하기 위해 사용한 것입니다.
 즉http://user_id.domain.com/hello.html이란 요청이 들어오면/home/user_id/public_html/hello.html로 redirect 시켜줍니다.
 위와 같이 2차 도메인을 이용해 계정 사용자의 홈을 지정하기 위해서는 DNS 세팅이 선행되어야 합니다.
 
- N- 새로운 Rule이 시작된다는 의미입니다.
 
- R- Redirection. 무조건 넘깁니다. 뒤 주소로 넘긴다는 의미입니다.
 
- NC- 대소문자를 구별하지 않습니다.
 
- OR- 프로그래밍의 or와 비슷합니다.
 
- QSA- Cond의 내용을 지난 결과에 덧붙입니다.
 
- NE- Out 될 값에 특수문자가 HexCode로 되어 포함된 경우
 
 
출처: http://apmusers.com/tt/dbckdghk/95
 참고할만한 다른글: http://www.superuser.co.kr/apache/rewrite_Module/Apache_rewrite_Module.htm
 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다. 






Comments