고급 URL 재작성 (Advanced URL Rewriting with mod_rewrite)
Apache의 mod_rewrite
모듈은 강력한 URL 재작성 기능을 제공하여, 복잡한 URL을 더 간단하고 사용하기 쉽게 변환할 수 있습니다. 여기서는 mod_rewrite
를 사용하여 URL을 재작성하는 규칙을 작성하는 방법과 관련된 내용을 설명하겠습니다.
소개 (Introduction)
mod_rewrite
는 Apache 웹 서버의 모듈 중 하나로, URL을 동적으로 재작성할 수 있는 기능을 제공합니다. 이 모듈은 다양한 조건과 규칙을 사용하여 클라이언트가 요청한 URL을 다른 URL로 변환할 수 있습니다.
개념 (Concept)
URL 재작성은 클라이언트가 접근하는 URL을 내부적으로 다른 URL로 변환하는 과정을 의미합니다. 이를 통해 사용자는 더 간단한 URL을 사용할 수 있고, 서버 측에서는 실제로 처리할 URL을 사용할 수 있습니다.
원리 (Principle)
mod_rewrite
는 정규 표현식을 사용하여 URL을 재작성합니다. 기본적인 흐름은 다음과 같습니다:
- 클라이언트가 특정 URL로 요청을 보냅니다.
- Apache는 요청된 URL을
mod_rewrite
규칙에 따라 검사합니다. - 규칙에 맞는 경우, 해당 URL을 새로운 URL로 변환합니다.
- 변환된 URL을 처리하여 클라이언트에게 응답합니다.
함수들 (Functions)
mod_rewrite
에서 자주 사용하는 디렉티브와 함수는 다음과 같습니다:
RewriteEngine On
:mod_rewrite
를 활성화합니다.RewriteRule
: 재작성 규칙을 정의합니다.RewriteCond
: 조건을 정의하여 조건이 맞을 때만RewriteRule
을 적용합니다.
예제들 (Examples)
간단한 URL 재작성
사용자가 /old-page
를 요청할 때, /new-page
로 리디렉션합니다.
RewriteEngine On RewriteRule ^old-page$ /new-page [R=301,L]
동적 URL 재작성
/product/123
와 같은 URL을 /product.php?id=123
으로 변환합니다.
RewriteEngine On RewriteRule ^product/([0-9]+)$ /product.php?id=$1 [L]
조건부 URL 재작성
특정 호스트에서의 요청에 대해 재작성합니다. 예를 들어, 호스트가 example.com
인 경우에만 재작성합니다.
RewriteEngine On RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^old-page$ /new-page [R=301,L]
SSL 강제 적용
HTTP 요청을 HTTPS로 강제 리디렉션합니다.
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
사용법 (Usage)
- Apache 설정 파일 수정:
httpd.conf
또는apache2.conf
파일에서mod_rewrite
모듈을 활성화합니다.
LoadModule rewrite_module modules/mod_rewrite.so
- 가상 호스트 설정: 가상 호스트 설정 파일에서
mod_rewrite
규칙을 정의합니다.
<VirtualHost *:80> ServerName www.example.com DocumentRoot "/var/www/html" <Directory "/var/www/html"> AllowOverride All </Directory> RewriteEngine On RewriteRule ^old-page$ /new-page [R=301,L] </VirtualHost>
- .htaccess 파일 사용: 웹 루트 디렉토리에
.htaccess
파일을 생성하여 규칙을 정의합니다.
RewriteEngine On RewriteRule ^old-page$ /new-page [R=301,L]
이와 같이 mod_rewrite
를 사용하여 URL을 재작성함으로써, 사용자 경험을 개선하고, 검색 엔진 최적화(SEO)를 향상시킬 수 있습니다.