티스토리 뷰
mod_rewrite
- url주소를 정규표현식을 사용하여 바꾸어 주는 모듈
- Server Config, Virtual Host, Directory, .htaccess에 사용 가능
- RewriteEngine on/off 으로 사용 여부를 설정
- RewriteLog File_path 로 로그를 기록할 파일 지정, RewriteLogLevel과 함께 써야함
- RewriteLogLevel level(0~9) 로 로그를 기록할 레벨 지정, 0은 기록 안함이고 높을수록 자세히
- RewriteBase / 기본 디렉토리를 /로 설정
- RewriteCond targetString ConditionPattern 으로 RewriteRule을 적용할 주소 선택. TargetString이 Condition pattern과 일치해야 RewriteCond아래의 RewriteRule을 실행한다.
- –d는 디렉토리 –f는 파일 –l은 심볼릭링크이고 !-f하면 파일이 아닌 것을 말한다.
- RewriteCond %{REQUEST_FILENAME} !-f 은 request가 파일을 안 가리키면, 밑의 RewriteRole을 따르라는 뜻
- RewriteRule pattern(inputURL) Substitution(outputURL) 실질적인 rewrite룰을 정하는 지시자 perl의 정규표현식 사용
- 사용시 플래그 ex) RewriteRule ^/test /home/blog/html/test.php [F]
- Forbidden | [F] 403에러로 redirect시킴
- Gone | [G] 410에러로 redirect시킴
- Proxy | [P] proxy request로 보냄
- Last | [L] 뒤에 어떤 룰이 있더라도 적용되지않고 rewrite룰을 빠져나옴, break같은 효과. 아래부터는 새로운 룰 시작
- Next | [N] 새로운 룰 시작
- Chain | [C] 이 플래그의 결과를 다음 RewriteRule의 input값으로 사용
- RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
- RewriteRule ^([^.]+)\.domain\.com(.*) /home/$1/public_html$2
- RewriteRule의 input은 도메인을 제외한 URI이기 때문에 체인은 홈의 도메인을 2차 도메인으로 자동 설정해 줄 때 많이 쓴다.
- 만약 http://user_id.domain.com/hello.html 이란 요청이 들어오면 /home/user_id/public_html/hello.html 으로 redirect 시켜준다.
- 우선 1번의 ^(.+)에서 ^는 (.+)로 시작되는 문자열이라는 뜻(^a는 a로 시작하는 문자열)이고 .은 아무 것이나 문자 하나를 뜻이다. +는 1개나 그 이상의 문자를 뜻한다. 즉 아무 문자 한 개나 아무 문자 여러 개로 시작되는 문자열이라는 것이다. ()로 묶인 문자열은 $1, $2와 같이 $몇번째()로묶인문자열 변수로 받아 사용된다. input으로 “/hello.html”만 받기 때문에 도메인 뒤에 input문자열을 $1으로 붙여서 체인 플래그 [C]를 사용하여 만든 결과를 다음 rewirteRule으로 넘긴다.
- 그리고 2번의 rewriteRule에서는 ([^.]+)를 사용한다. []는 []안에 들어있는 문자 중에 하나이고([ab]는 a이거나b) []안에서는 +.*등의 특수문자가 적용되지 않지만 ^는 not의 의미로 적용된다. 원래 .은 아무 문자 하나를 뜻하지만 [] 안에서 [^.]은 .이 아닌 아무 문자라는 뜻이고 [^.]+는 .이 아닌 어느 문자 한 개 or 몇 개이다. ([^.]+)으로 ‘.’이 아닌 문자열 즉 “user_id”를 변수 $1에 넣는다. *은 문자 0개 또는 그 이상이라는 뜻이다 (.*)는 아무 문자 0개 또는 그 이상인 문자열으로 ~.com다음의 “/hello.html”를 받아서 $2에 넣어준다.
- Redirect | [R=code] Substitution으로 redirect됨
- 코드
- 301 moved permanently
- 302 moved temporarily
- 403 forbidden
- 404 not found
- 410 gone
- Passtrough | [PT] 문자열을 처리하고 다음 핸들러로 후처리 하도록 넘긴다. rewrite한 후에 브라우저에 rewirte처리한 문자열이 아닌 원래 문자열이 남는다.
- Case insensitive | [NC] 대소문자 구분 안 함
- 한번에 두 플래그 쓰려면 [R=301,NC] 처럼 사용가능
- RewriteOptions Maxredirects=number 으로 설정된 number값에 도달하면 500 Internal Server Error를 남기고 RewriteRule을 종료한다.
- RewirteMod Mapname maptype:MapSource 로 url을 maptype으로 Mapsource를 읽어서 mapping한다.
- 사용법
- ${MapName:LookupKey}
- ${MapName:LookupKey|DefaultValue}
- Ex) RewriteMap examplemap txt:/path/to/file/map.txt
- RewriteRule ^/ex/(.*) ${examplemap:$1}
- 4번에서 /ex/뒤의 문자열을 가지고 3번에서 examplemap의 map source인 map.txt에서 매칭된 url을 찾는다.
- Type
- txt – plain text
ex) RewriteMap real-to-user txt:/path/to/file/map.txt - rnd – randomized plain text
ex) RewriteMap servers rnd:/path/to/file/map.txt - example
##map.txt #은 주석
Static www1|www2|www3|www4
Dynamic www5|www6
RewriteMap servers rnd:/path/to/file/map.txt
RewriteRule ^/(.*\.(png|gif|jpg)) http://${servers:static}/$1 [NC,P,L]
RewriteRule ^/(.*) http://${servers:dynamic}/$1 [P,L]
확장자가 png or gif or jpg이면 servers map.txt에서 static을 찾아서 www1, 2, 3, or www4 중에 랜덤하게 매칭
확장자가 다른 것들은 dynamic으로 www5 or www6 –> 이 기능으로 로드밸런싱 할 수 있다.
- txt – plain text
- 사용법
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파노라마
- HAXM
- shortcut
- 물리키보드
- MASTER
- 아르고
- 로지텍
- 회전
- 화면
- UX
- USB 키보드
- VX 나노
- 젤리빈
- 수리
- EMULATOR
- xe 서버 해외 타임존 timezone 시간설정
- 블루투스 키보드
- Android
- MySQL Replication
- 뒤로가기
- 산성동성당
- xe
- 속도
- 아이스크림샌드위치
- Slave
- 액티비티
- 안드로이드
- 에뮬레이터
- 볼링장
- 버튼
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함