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
'SW > WEB WAS' 카테고리의 다른 글
| [Apache] OpenSSL을 사용한 자체 서명된 인증서 발급 및 적용 (0) | 2024.09.21 |
|---|---|
| [Apache] 아파치 서버 보안 설정_ 업로드 크기 제한, 이미지 도용 방지, 접근 제어 (0) | 2024.09.21 |
| [Apache] mod_vhost_alias와 mod_rewrite (0) | 2024.09.17 |
| [Apache] Virtual Hosts 종류 알아보기 (0) | 2024.09.14 |
| [Apache] 아파치 로그 파일 관리하기_rotatelogs (1) | 2024.09.14 |