WEB/WAS/Apache

Apache rewrite 정리

알 수 없는 사용자 2016. 1. 28. 14:10

[Rewrite 지시자]

. : 다수의 한문자
? : 0개 이상의 한문자
* : 0개 이상의 문자 또는 문자열
+ : 1개 이상의 문자 또는 문자열
(chars) : (, ) 안의 문자또는 문자열을 그룹으로 묶는다.
          이 문자그룹은 Substitution(return URL)에서 $N 의 변수로 활용할수 있다.
^ : 문자열의 첫문(열)을 지정
$ : 문자열의 끝 문자(열)을 지정
(역슬래쉬) : 정규표현식에서 특별한 의미로 사용되는 문자의 특수기능을 제거
{n} : 정확히 n번 반복
{n,} : n번 이상 반복
{n,m} : n 이상 m 이하 반복
[chars] : 문자들의 범위 또는 표현할 수 있는 문자들을 설정합니다.
예) [a-z] : a 부터 z 까지의 소문자, [tT] : 소문자 t 또는 대문자 T

[Rewrite Subrutine 지시자]

L : 뒤구문 여부를 무시하고 그 줄에서 끝낸다.
N : 새로운 Rule이 시작된다는 의미.
R : Redirection. 무조건 넘긴다. 뒤 주소로 넘긴다는 의미.
NC : 대소문자를 구별하지 않는다.
OR : 프로그래밍의 or와 유사.
QSA : Cond의 내용을 지난 결과에 덧붙인다.
NE : Out 될 값에 특수문자가 HexCode로 되어 포함되어 있는 경우.


=======================================================================================


예제)


[test.com을 www.test.com으로 리다이렉트]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(test\.com)
RewriteRule (.*)  http://www.test.com/$1  [L]


[www.test.com, test.com으로 시작하는 주소를 www.sample.co.kr로 리다이렉트]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.test\.com|test\.com)
RewriteRule (.*)  http://www.sample.co.kr/$1  [L]


[www.test.com으로 시작하는 주소를 www.sample.co.kr로 리다이렉트]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.test\.com)
RewriteRule (.*)  http://www.sample.co.kr/$1  [L]


[test.com을 test.com/sub 로 리다이렉트]

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(test\.com|www\.test\.com)
RewriteRule (.*)  /sample/$1  [L]


[test.com/sample를 하위 주소까지 ccc.co.kr로 리다이렉트 (영구 이동)]

RewriteEngine On
RewriteRule (.*)  http://www.ccc.co.kr/$1  [R=301,L]

또는

RewriteEngine On
RewriteRule  ^sample/(.*)  http://www.ccc.co.kr/$1  [R=301,L]
(여기서 R=301은 그 주소로 영구이동.
 이렇게 하면 도메인 주소를 바꿨을 때에 검색기들이 알아 차리고, 옛 주소를 새 주소로 갱신할 수 있다.)


[test.com이 들어가는 모든 주소(서브도메인 포함)를 sample.co.kr로 리다이렉트]

RewriteEngine On
RewriteCond %{HTTP_HOST} test\.com
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.test\.com(.*)  http://$1.sample.co.kr/$2  [L]
RewriteRule ^test\.com(.*)  http://sample.co.kr/$1  [L]


[모든 요청을 SSL로 리다이렉트]

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]


[https://www.test.com/m 하위 세부경로 표기]

RewriteRule !^/m https://www.test.com/m%{REQUEST_URI} [R=301,L]