SW/WEB WAS

[Apache] 아파치 Alias, Redirect, Rewrite 설정 살펴보기

yeit 2024. 9. 18. 17:47
728x90

 

아파치에서 URL을 처리하는 세 가지 기본적인 방법인 Alias, Redirect, Rewrite에 대해 알아보자.

 

[Intro]

아파치는 기본적으로 DocumentRoot 디렉토리를 기준으로 파일을 탐색하지만 다른 경로에 있는 파일이 있을 수 있다. 이때 사용하는 게 Alias, Redirect, Rewrite이다.

 

Alias는 URL를 디렉토리로 매핑할 때 사용되고, Redirect와 Rewrite는 사이트 구조 변경이나 링크가 깨지는 것을 방지하기 위해 기존 URL을 다른 URL로 매핑하거나 수정할 때 사용된다. 하나씩 자세히 살펴보자.

 

 

 

1. Alias

  • URL을 특정 디렉토리로 매핑하는 방법
  • 심볼릭 링크를 사용할 수도 있지만 Alias를 사용하는게 디렉토리 위치를 관리하기가 더 수훨하다.
  • httpd.conf에서 Alias를 설정해준다.
 Alias "/desired-URL-prefix" "/path/to/other/directory"
  • 첫 번째 경로는 URL 경로를 의미, 두 번째 경로는 실제 파일 시스템 경로를 의미
    (ex.사용자가 http://test.com/desired-URL-prefix로 접근하면 Apache는 /path/to/other/directory 디렉토리로 매핑)
  • 대상 디렉토리에 대한 접근을 허용하려면 아래와 같이 설정이 필요하다.
 <Directory "/path/to/other/directory">
 	Order allow,deny
 	Allow from all
 </Directory>

 

  • Order allow,deny : allow 규칙 적용 후, deny 규칙 적용
  • Allow from all : 모든 접근 허용
  • 추가로 Alias 설정 시에는 URL 끝의 / 유무에 따라 매핑이 다르게 될 수 있으니 주의해야 한다.

 

2. Redirect

  • URL을 다른 URL로 매핑하는 방법
  • 클라이언트가 요청한 URL을 다른 URL로 완전히 이동시키며, 보통 HTTP 상태 코드(301, 302, 303 등)와 함께 사용된다.
  • httpd.conf에서 Redirect를 설정해준다.
 <VirtualHost *:80>
     	ServerName www.도메인.com
     	Redirect /data <리다이렉팅 URL>
 </VirtualHost>
  • URL의 대대소문자 구분하지 않고 싶다면 mod_speling모듈을 사용하면 된다.
 LoadModule speling_module modules/mod_speling.so
 CheckSpelling On

 

Redirect 종류

  • temp : 임시 리다이렉트(기본값)
  • permanent : 영구 리다이렉트
  • gone : 요청한 문서가 더 이상 존재하지 않음
  • seeother : 요청한 문서가 다른 위치에 있으며, 클라이언트는 새로운 URL로 재요청해야 함. 주로 문서가 새 버전으로 교체되었을 때 사용됨
 Redirect temp /test.html http://example.com/new/test.html  #302 상태 코드
 Redirect permanent /test.html http://example.com/relocated/test.html  #301 상태 코드
 Redirect seeother /test.html http://example.com/new/bar.html  #303 상태 코드
 Redirect gone /test.html  #410 상태 코드

 

 

3. Rewrite

  • mod_rewrite 모듈을 사용해 URL을 수정하는 방법
  • URL을 동적으로 변환하거나 복잡한 조건에 맞춰 URL을 재작성할 때 사용된다.
  • 요청된 URL의 문자열 string1을 string2로 변경하고 싶다면 아래와 같이 설정해준다.
 RewriteEngine On
 RewriteRule "(.*)string1(.*)" "$1string2$2" [N,PT]
  • [N] 플래그 : Apache에게 재작성 규칙을 다시 실행하도록 지시 (즉, URL에 string1이 더 이상 없을 때까지 규칙이 반복 실행됨)
  • [PT] 플래그 : URL 재작성 후 Apache의 나머지 처리 과정으로 URL을 전달하도록 지시
  • 클라이언트 요청을 SSL로 리디렉션하는 방법도 많이 쓰인다.
 # 모든 요청을 SSL로 리디렉션
 RewriteCond "%{SERVER_PORT}" "^80$"
 RewriteRule "^(.*)$" "https://%{SERVER_NAME}$1" [R,L]

 # 특정 요청을 SSL로 리디렉션
 RewriteRule "^/normal/secure(/.*)" "https://%{HTTP_HOST}$1" [R,L]

 # Redirect 지시어 사용한 SSL 리디렉션
 Redirect "/" "https://secure.example.com/"

 

 

 

728x90