Apache rewrite 정리
[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]