이번 포스팅에서는 아파치의 Rewrite 모듈을 사용하여 페이지 리다이렉션 하는 방법에 대해 알아보도록 하자!


1. mod_rewrite 활성화

아파치는 서버 역할을 할 수 있는 최소한의 코어 만으로 이루어져 있고, 추가적인 기능을 사용할 때에는 모듈을 활성화시켜야 한다. 이번에 우리는 rewrite 모듈을 사용할 것이므로, 우선 rewrite 모듈을 활성화하는 방법부터 살펴보자!

다음 두가지 방법 중 하나를 선택해서 적용하면 된다.

 

① 설정하려는 httpd.conf 파일(vhost.confssl.conf 처럼 다를 수 있음.)에 직접 추가

# httpd.conf 파일 수정

# conf 파일 맨 상단에 아래 문구 추가
LoadModule rewrite_module modules/mod_rewrite.so

 

② {apache_home}/conf.modules.d/00-base.conf 파일 수정

nano 또는 vi 명령어로 00-base.conf 파일을 연 후, 아래 문구를 추가하거나 주석 처리 된 것을 해제한다.

# 00-base.conf 파일 수정

LoadModule rewrite_module modules/mod_rewrite.so

 

위와 같은 방법으로 mod_rewrite를 활성화시켰다면, 아파치를 restart 해야 한다.

 

2. httpd.conf 파일에 rewrite 관련 지시어 추가

 

  2-1) RewriteEngine

  RewriteEngine On/Off 형태로 사용한다. Rewrite 모듈을 설정파일의 해당 호스트 또는 섹션에서 활성화 여부를 설정하는 부분이다.

 

  2-2) RewriteCond

RewriteCond TestString Condition [Flags]

  위와 같은 형태로 사용하며, RewriteRule을 적용시키기 위한 조건을 설정하는 부분이다.

  'TestString' 에 위치한 부분이 'Condition' 과 일치한다면 RewriteRule 규칙을 적용시키게 된다.

 

  사용 예시는 아래 3번에서 살펴보기로 하자!

 

  2-3) RewriteRule

RewriteRule Pattern Substitution [Flags]

  위와 같은 형태로 사용되며, 실제 Rewrite, 즉, 리다이렉션을 적용시키기 위한 지시어다. URL 리다이렉션 뿐만 아니라,
  file의 절대 경로로 바꿔주는 역할을 할 수도 있다.

  'Pattern' 부분과 매칭되는 부분을 'Substitution' 형태로 수정한다는 의미이다. 

 

  이에 대한 사용 예시도 아래 3번에서 살펴보기로 하자!

 

  3. Rewrite 전체 사용 예시

  예시로는 HTTP로 들어온 요청을 자동으로 HTTPS 로 리다이렉션 시켜주는 방법에 대해 살펴보자!

  참고로 아래 예시에서는 가상 호스트 설정을 하고, 이 서버에 대한 이름은 co-no.intranet.co.kr 로 가정한다.

  또한 DocumentRoot는 /deployment/INTRANET 으로 설정하여, 이 포스팅에서 언급하는 Rewrite 설정과는 연관이 없으므로, 그냥 그러려니 하고 넘어가도 된다.

# VirtualHost.conf 파일 설정

LoadModule rewrite_module modules/mod_rewrite.so

<VirtualHost *:80>
    ServerName co-no.intranet.co.kr
    DocumentRoot /deployment/INTRANET
    
    # Rewrite 지시어
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</VirtualHost>

위 구문을 간단히 해석하자면, 'co-no.intranet.co.kr' 이라는 가상 호스트에 대해서 80포트로 들어오는 요청에 대해 Rewrite를 적용시킬건데, 만약 co-no.intranet.co.kr 에 대한 요청이 HTTPS off 되어 있다면(80포트로 들어오는 요청에 대해 적용시키는 것이니, 당연히 off 되어 있겠지?), https://co-no.intranet.co.kr 리다이렉션 하겠다는 의미이다.

 

  • %{HTTPS} : SSL 사용 여부를 의미하며, on/off 값으로 return 된다.

  • (.*) : 정규표현식(Regex) 으로 나타낸 형태이다. '()' (소괄호 양옆) 은 문자를 그룹화 시키고,  '.' (마침표) 는 문자 하나를 대체하며, '*' (애스터리스크) 는 이전에 대체된 것을 반복 또는 빈 문자열을 대체한다는 것을 의미한다.
    즉, 위 예시에서 사용도니 정규표현식을 해석하면 요청으로 들어온 URL의 '모든 문자열' 이라고 해석할 수 있다.

  • %{HTTP_HOST} : 호출된 서버의 domain을 의미하는데, 위 예시에서는 'co-no.intranet.co.kr' 에 해당한다. 이때 170.20.30.40:80 처럼 IP와 포트 형태로 브라우저에서 도메인이 넘어온 경우에는, 포트 번호까지 포함된다.
  • %{REQUEST_URI} : 도메인 이후의 리소스 절대 경로 및 파라미터를 나타낸다. 
    예를 들어 'co-no.intranet.co.kr/myurl.html?var=value' 형태로 요청이 넘어왔다면, /myurl.html?var=value 부분이 이에 해당한다.

  • [R] : HTTP의 리다이렉트를 수행하는 Flag 이다. 이 플래그 다음으로 나오는 추가적인 RewriteRule이 있다면, Invalid URI 에러가 날 수 있으므로, 보통 [L] Flag와 함께 사용하게 된다.

  • [L] : 마지막 RewriteRule 임을 의미하는 Flag 이다. 비슷한 기능으로 [END] 도 있으나, 잘 사용하지는 않는다.

※ 패턴에 사용되는 정규표현식

Character Meaning Example
. 문자 하나를 대체 c.t => cat, cot, cut, etc.
+ 이전에 대체된 것을 반복 a+ => a, aa, aaa, etc.
* 이전에 대체된 것을 반복 또는
빈 문자열 대체
a* => , a, aa, etc.
? 해당 문자가 있어도 되고, 없어도 된다는 의미 colou?r => color (u가 없어도 매칭됨), colour, etc.
\ 이스케이프 문자.
정규 표현식 문자를 표현하기 위해 사용
\. => .
(위에서의 마침표는 정규식 의미를 가지지 않는 단순 string)
^ 앵커.
문자열의 첫 부분과 매칭됨.
^a => apple, anchor, etc.
$ 다른 종류의 앵커.
문자열의 끝부분과 매칭됨.
$m => com, mom, etc.
() 문자를 그룹화 시킴. 
$1, $2, %1 과 같이 그룹화된 부분을 변수처럼 반복적으로 사용할 수 있음.
(ab)+ => ab, abab, ababab, etc.
[] 문자 클래스.
대괄호 안 문자 중에 하나를 매칭시킴
c[uoa]t => cut, cot, cat
[^] 문자 클래스의 반대.
대괄호 안에 포함되지 않는 문자를 매칭시킴
c[^/]t => cat, cut, etc.
c/t 는 안됨.

 

◈ 정규식을 통한 역참조 흐름

출처 : https://httpd.apache.org/docs/current/rewrite/intro.html

※ RewriteRule의 다양한 플래그 참조

https://runebook.dev/ko/docs/apache_http_server/rewrite/flags

 

Apache HTTP Server - RewriteRule 플래그 - 이 문서에서는 RewriteRule 지시문에 사용할 수있는 플래그에 대

 

runebook.dev


참고

https://snoop-study.tistory.com/10

 

[Apache] RewriteRule 정리

PHP에서 쓰이는 RewriteRule은 Apache Server로 들어온 요청 URL을 편집해서 PHP에 전달한다. .htaccess 파일이나 Apache httpd.conf 파일에 작성하면 된다. (전역 설정) 아파치 config 파일에 VirtualServer를..

snoop-study.tistory.com

https://hiseon.me/server/apache-rewrite-examples/

 

아파치 rewrite 설정 - HiSEON

아파치 rewrite 설정 Apache에서 사용된는 rewrite 모듈 설정 방법에 대해 설명드립니다. 주요 옵션인 RewriteRule에서 사용되는 정규식과 RewriteCond 조건 사용방법 변수등에 rewrite 예제에 대해서 설명드리

hiseon.me

 

 

 

아파치 rewrite 설정 - HiSEON

아파치 rewrite 설정 Apache에서 사용된는 rewrite 모듈 설정 방법에 대해 설명드립니다. 주요 옵션인 RewriteRule에서 사용되는 정규식과 RewriteCond 조건 사용방법 변수등에 rewrite 예제에 대해서 설명드리

hiseon.me

https://www.hyoyoung.net/46

 

apache 에서 https 강제 redirect

apache 에서 mod_rewrite 모듈을 이용해 특정 페이지를 redirect 하는 방법입니다. 검색을 해 보면 일반적으로 .htaccess 파일을 생성하여 사용하라고 되어 있는데, apache 스펙 문서를 보면 .htaccess 는 과도

www.hyoyoung.net

https://www.hostwinds.kr/tutorials/enable-mod_rewrite

 

Apache mod_rewrite 모듈 활성화 | Hostwinds

Apache mod_rewrite를 활성화하는 방법 Apache 웹 서버는 다양한 Linux 배포판 중 유행 웹 서버입니다.이 인기는 모듈을 활성화하거나 비활성화하여 필요에 맞게 웹 서버를 사용자 정의 할 수있는 모듈

www.hostwinds.kr

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기