[httpd] Apache httpd Rewrite 모듈 설정 - 페이지 리다이렉션 하기
이번 포스팅에서는 아파치의 Rewrite 모듈을 사용하여 페이지 리다이렉션 하는 방법에 대해 알아보도록 하자!
1. mod_rewrite 활성화
아파치는 서버 역할을 할 수 있는 최소한의 코어 만으로 이루어져 있고, 추가적인 기능을 사용할 때에는 모듈을 활성화시켜야 한다. 이번에 우리는 rewrite 모듈을 사용할 것이므로, 우선 rewrite 모듈을 활성화하는 방법부터 살펴보자!
다음 두가지 방법 중 하나를 선택해서 적용하면 된다.
① 설정하려는 httpd.conf 파일(vhost.conf나 ssl.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 는 안됨. |
◈ 정규식을 통한 역참조 흐름

※ 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
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