mod_rewrite를 활용한 Clean URL 적용방법

1. Clean URL이란?

Clean URL 이란 검색엔진 친화적인 URL(Search Engine Friendly URL)이라고도 불리는 웹 주소 처리 방법으로 길고 복잡한 URL을 특수문자 등을 제거하고 간결하게 만드는 것을 말한다.

예를 들어 아래와 같은 주소를 가진 웹 페이지가 있다고 가정하자.

http://127.0.0.1/page/index.php?menu=board&page=1

보통 URL을 연결해서 원하는 목적지(웹 페이지)에 도달하면 그만이지만 사용자들은 위와 같이 복잡한 구조를 가지는 주소를 쉽게 기억하지 못한다. 또 위 주소와 같이 URL 안에 ? 또는 =, & 와 같은 기호들이 포함되어 있다면 검색엔진(네이버, 구글 등과 같은)들이 이 주소를 저장하고 화면에 표시하는데 약간의 어려움이 있을 것으로 예상된다.

왜냐면 ?나 =, &는 웹 프로그래밍 언어 입장에서 연산자나 특수한 목적의 기호로 사용될 수 있기 때문이다. 물론 대부분의 고급 웹 검색엔진들은 위와 같은 복잡한 주소도 잘 저장하고 표시하지만 하나의 웹 페이지를 표시하는데 따라 붙는 정보가 많으면 많을수록 주소는 복잡하고 이해하기 어려워진다.

따라서 위와 같은 주소를 보다 간결하고, 검색엔진이 처리하기 쉽도록 하며, 사용자가 기억하기 쉽도록 하기 위해서 ?나 =, &를 사용하지 않고 페이지의 제목이나 위치 등을 쉽게 알아차릴 수 있는 깨끗한(clean) 모양으로 만들고자 하는 개발자들이 늘어났다.

그래서 위와 같은 주소는 다음과 같이 아주 간단하게 줄이고자 하는 것이다.

 http://127.0.0.1/page/board/1

 이것을 Clean URL 또는 검색엔진 친화적인 URL이라고 한다.

 

2. mod_rewrite란?

mod_rewrite는 Apache 웹서버에서 Clean URL을 만들기 위해 최근에 가장 많이 사용되는 방법이다. mod_rewrite는 Apache에 추가하여 사용하는 모듈 프로그램으로 사용자가 입력한 URL을 받아들여서 웹 사이트 운영자가 설정한 특정 페이지가 표시되도록 하는 기능을 한다.

예를 들어 사용자는 http://127.0.0.1/aaa.html을 웹브라우저에서 열었지만 실제 페이지에 보이는 내용은 http://127.0.0.1/bbb.html의 내용이 되게 하는 것이다. 브라우저에 표시된 페이지는 여전히 aaa.html 이지만 내용은 bbb.html가 되는 것이다. aaa.html에 접근했을 때 브라우저 주소와 내용 모두 bbb.html로 이동되도록 처리할 수도 있다. 이러한 방법은 일종의 속임수이지만 실제로는 URL을 간결하게 처리하거나 여러 가지 보안 설정 등을 위해 아주 유용하고 일반적으로 사용되는 기술이다. 이런 일들은 서버 차원에서 벌어지는 일이다.

mod_rewrite를 활용하여 http://127.0.0.1/page/board/1 에 접근한 사용자에게 실제로는 http://127.0.0.1/page/index.php?menu=board&page=1 의 내용을 보여줄 수 있게 되는 것이다. 이것이 Apache의 mod_rewrite 모듈을 활용한 Clean URL 이다.

mod_rewrite는 주소를 간결하게 표시하는 것 외에도 다른 사람들이 내 웹서버의 이미지이나 특정 파일들을 무단을 링크해서 쓸 경우 이를 미리 지정한 다른 이미지나 파일 또는 웹 페이지로 연결되도록 하는 용도로도 사용할 수 있으며, 사이트에 접근한 사용자들에게 일시적으로 다른 사이트로 자동 이동되도록 하는데도 사용할 수 있다. 이러한 기능들은 앞으로 배울 mod_rewrite 모듈의 규칙과 조건 등의 설정에 따라 다르게 동작할 수 있다. 

[참고]

Apache 외에 웹서버로 유명하고 많이 사용되는 것이 Microsoft Windows Server 계열에서 사용되고 있는 IIS 웹서버이다. IIS는 Windows XP, 7 등의 Professional 버전과 Server 버전에서 설치해 사용할 수 있는 웹서버이다. IIS에서 Clean URL을 구현하기 위해서는 어떻게 해야 할 까? mod_rewrite는 Apache 웹서버를 위한 모듈이므로 IIS에서는 사용할 수 없다. 대신 IIS는 IIS URL Rewrite라는 확장 모듈이 있다. 이를 이용해서 mod_rewrite와 같은 기능을 구현할 수 있다.

 

3. mod_rewrite 동작 환경

 mod_rewrite 모듈이 동작하기 위해서는 Apache에 mod_rewrite 모듈이 설치되고 Apache 환경설정 파일에서 불러오도록 설정이 되어 있어야 한다.

이제 이 환경을 확인하고 설정하는 방법에 대해 알아보자. 여기서는 2012년 지방기능경기대회까지(?) 사용할 APM_Setup5_2004_05_18(모든OS) 버전을 기본 설치했을 때의 환경을 기준으로 설명한다.

 ○ mod_rewrite.so 파일 확인

APM_Setup5를 기본 설정대로 설치하면 C:Apm_Setup 폴더가 생성되고 그 아래 여러 프로그램들과 폴더들이 설치된다. 그 중에서 Apache 관련 파일들은 C:Apm_SetupServerApache 아래에 있다. 그 중에서 mod_rewrite와 같은 모듈들은 modules 폴더들에 모여 있다.

아래 그림을 보면 C:APM_SetupServerApachemodules 폴더에 mod_rewrite.so 파일이 보인다. 이 파일이 있다면 mod_rewrite 모듈이 설치되어 있는 것이다.

noname01

 

○ httpd.conf 파일 확인

httpd.conf는 Apache 웹서버 실행과 관련된 여러 가지 환경 설정 값들을 저장해 놓은 파일이다. 이 파일 안에는 웹서버의 기본 디렉토리(127.0.0.1을 열었을 때 기본으로 연결하는 페이지가 들어 있는 폴더)에 관한 설정을 비롯해서 아주 복잡한 내용의 설정들이 포함되어 있다. 그러나 여기서 살펴볼 것은 httpd.conf 안에 mod_rewrite 파일을 읽어들여 실행하도록 되어 있는지에 관한 것이다.

httpd.conf 파일은 C:APM_SetupServerApacheconf 안에 있다. 

noname02

이제 httpd.conf 파일을 열어서 설정을 확인해보자. 이 파일은 텍스트 파일이므로 메모장이나, editplus 등으로 열어서 보아야 한다. hwp나 word 같은 문서편집 프로그램으로 여는 것은 바람직하지 않다. 몇 번 째 줄 정도에 어떤 내용을 찾아보도록 설명하는 경우가 많으므로 editplus와 같은 프로그램을 사용해서 열어볼 것을 권장한다.

 #LoadModule rewrite_module modules/mod_rewrite.so

파일을 열어 182번 째 줄로 이동하면 위의 내용이 보일 것이다(몇 번 째 줄인지는 설정 파일에 따라 달라질 수 있다). 이 설정은 Apache가 설치된 디렉토리(폴더)의 modules 아래 mod_rewrite.so를 실행시키라는 명령 줄이다. 그런데 이 줄의 맨 앞에 #이 붙어 있다. #은 주석표시 문자이다. 따라서 # 오른쪽의 내용은 실행되지 않는다. mod_rewrite를 작동하게 하려면 #을 지우고 저장해야 한다.

 

 noname03

#AddModule mod_rewrite.c

httpd.conf 파일의 225번 째 줄 쯤에 보면 #AddModule mod_rewrite.c 부분이 보인다. 위에서와 마찬가지로 Apache에서 mod_rewrite 모듈이 활성화되게 하려면 이 부분도 주석을 제거해야 한다.

noname04

 

#AllowOverride 설정

httpd.conf 파일의 341번 째 라인을 보면 아래 그림과 같이 AllowOverride None 이라고 설정되어 있는 부분을 볼 수 있다.

noname05

 

여기서 <Directory “C:/Apm_Setup/htdocs”> … </Directory> 부분은 C:/Apm_Setup/htdocs 폴더에 관한 설정으로 접근에 대한 제한 또는 실행 환경 등을 포함하고 있다. htdocs 폴더는 Apm_Setup5를 기본 설치했을 때 홈디렉토리(사이트를 열었을 때 기본으로 열리는 폴더)가 되므로 htdocs에 웹사이트를 저장할 것이라면 이 부분의 내용을 수정해야 한다. 만일 홈디렉토리를 htdocs가 아닌 htdocs2로 하고자 한다면 위의 설정에서 htdocs 대신에 htdocs2라고 바꾸면 된다. 그러나 이런 변경은 민감한 변화를 일으키므로 확신이 없으면 그대로 두어야 한다.

단, 여기서 mod_rewrite 모듈을 정상적으로 작동하도록 하기 위해서는 한 가지를 바꿔줘야 하는데 바로 AllowOverride None 부분이다. AllowOverride 는 디렉토리(폴더)에 대한 접근 권한과 관련된 설정인데 지금은 이 설정의 값이 None으로 되어 있으므로 mod_rewrite 규칙을 기록할 .htaccess 파일을 사용할 수 없게 된다. 따라서 .htaccess 파일을 사용가능하게 하려면 이 설정을 아래와 같이 바꿔야 한다(대소문자가 바뀌면 에러가 발생하므로 정확히 입력).

AllowOverride FileInfo

 또는 AllowOverride All 과 같이 해줘도 된다.

* 뒤에서 자세히 다루게 될 .htaccess 파일은 mod_rewrite를 활용해 웹 사이트 주소를 정의하는 환경설정 값들을 저장해 두는 파일이다. 이 파일이 저장되어 있는 디렉토리(폴더)에는 파일 안의 규칙이 적용되는 것이다.

 

 

댓글 남기기