Apache HTTP Server Version 2.4

Apache > HTTP Server > Documentation > Version 2.4 > 모듈

# 아파치 모듈 mod_alias

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

설명: | 파일시스템의 다른 부분들을 문서 계층구조에 포함하고, URL 리다이렉션을 제공한다
상태: | Base
모듈명: | alias_module
소스파일: | mod_alias.c

### 요약

이 모듈이 제공하는 지시어들을 사용하여 서버가 요청을 받을때 URL을 수정하거나 조작할 수 있다. `Alias`와 `ScriptAlias` 지시어는 URL을 파일시스템 경로로 대응한다. 그래서 `DocumentRoot` 아래에 없는 내용을 웹으로 서비스할 수 있다. 또, `ScriptAlias` 지시어는 지정한 디렉토리에 CGI 스크립트밖에 없다고 알린다.

`Redirect` 지시어는 클라이언트에게 다른 URL로 새로운 요청을 하도록 지시한다. 자원을 새로운 장소로 옮긴 경우 자주 사용한다.

`mod_alias`는 간단한 URL 조작을 위해 설계되었다. 질의문자열 조작과 같은 복잡한 작업은 `mod_rewrite`가 제공하는 기능을 이용하라.

### 주제

- 처리 순서

### 지시어들

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### 참고

- `mod_rewrite`
- URL을 파일시스템에 대응

## 처리 순서

서로 다른 사용장소에서 Alias와 Redirect를 사용하면 다른 지시어와 같이 표준 결합 방법에 따라 처리한다. 그러나 같은 사용장소에 (예를 들어, 같은 `<VirtualHost>` 섹션에) Alias와 Redirect를 사용하면 아래 순서대로 처리한다.

먼저 모든 Redirect를 처리한 후 Alias를 처리한다. 그래서 `Redirect`나 `RedirectMatch`에 해당하는 요청은 절대로 Alias하지 않는다. 그리고 Alias와 Redirect는 설정파일에서 첫번째로 나오는 것을 사용한다.

그래서 여러 지시어가 동일한 하위경로에 해당하는 경우 모든 지시어를 적용하기위해서는 가장 상세한 경로를 먼저 사용해야 한다. 예를 들어, 다음 설정은 의도한대로 동작한다:

`Alias /foo/bar /baz
Alias /foo /gaq`

그러나 위의 두 지시어 순서를 바꾸면 `/foo/bar` `Alias` 이전에 `/foo` `Alias`를 적용하므로 항상 두번째 지시어를 무시한다.

## Alias 지시어

설명: | URL을 특정 파일시스템 장소로 대응한다
문법: | `Alias URL-path file-path|directory-path`
사용장소: | 주서버설정, 가상호스트
상태: | Base
모듈: | mod_alias

`Alias` 지시어를 사용하면 파일시스템에서 `DocumentRoot` 밖에 있는 문서도 서비스할 수 있다. url-path로 시작하는 (%로 인코딩된) URL을 directory-path로 시작하는 파일에 대응한다.

### 예제:

`Alias /image /ftp/pub/image`

http://myserver/image/foo.gif를 요청하면 서버는 /ftp/pub/image/foo.gif 파일을 넘겨준다.

url-path 끝에 /를 포함하면, URL 끝에 /를 사용해야만 영향이 있음을 주의하라. 즉, `Alias /icons/ /usr/local/apache/icons/` 설정은 url `/icons`와 관계가 없다.

대응의 대상을 포함하는 여러 `<Directory>` 섹션이 필요할지도 모른다. 이 지시어는 `<Directory>` 섹션을 검사하기 전에 처리하므로, 대응의 대상만 섹션의 영향을 받는다. (그러나 `<Location>` 섹션은 이 지시어를 처리하기 전에 한번만 검사하므로 지정한 URL 이하 전체에 영향을 준다.)

특히 `DocumentRoot` 밖에 있는 디렉토리로 `Alias`를 만들었다면, 직접 대상 디렉토리의 접근을 허용해줘야 한다.

### 예제:

`Alias /image /ftp/pub/image
<Directory /ftp/pub/image>
Order allow,deny
Allow from all
</Directory>`

## AliasMatch 지시어

설명: | 정규표현식을 사용하여 URL을 파일시스템 장소로 대응한다
문법: | `AliasMatch regex file-path|directory-path`
사용장소: | 주서버설정, 가상호스트
상태: | Base
모듈: | mod_alias

이 지시어는 `Alias`와 같지만, 간단히 URL의 앞부분만 비교하는 대신 표준 정규표현식을 사용한다. 지정한 정규표현식을 URL 경로와 비교하여 맞다면, 서버는 괄호로 묶은 부분을 대체하여 파일명으로 사용한다. 예를 들어, 다음과 같이 `/icons` 디렉토리를 사용할 수 있다:

`AliasMatch ^/icons(.*) /usr/local/apache/icons$1`

## Redirect 지시어

설명: | 클라이언트가 다른 URL에 접속하도록 요청하는 외부 리다이렉션을 보낸다
문법: | `Redirect [status] URL-path URL`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
Override 옵션: | FileInfo
상태: | Base
모듈: | mod_alias

Redirect 지시어는 이전 URL을 새로운 URL로 대응한다. 클라이언트에게 새로운 URL을 보내고, 클라이언트는 새로운 주소로 다시 한번 접속한다. (%로 인코딩된) URL-path로 시작하는 요청을 받으면 (%로 인코딩된) URL로 시작하는 새로운 URL로 리다이렉션 오류를 보낸다.

### 예제:

`Redirect /service http://foo2.bar.com/service`

클라이언트가 http://myserver/service/foo.txt를 요청하면 대신 http://foo2.bar.com/service/foo.txt에 접근하라는 응답을 받는다.

### 주의

Redirect 지시어는 설정파일에서 나오는 순서와 관계없이 Alias와 ScriptAlias 지시어보다 우선순위가 높다. 또, .htaccess 파일이나 `<Directory>` 섹션에서 사용하더라도 URL-path에는 상대경로가 아니라 반드시 완전한 URL을 사용해야 한다.

status 아규먼트를 지정하지않으면, "임시 (temporary)" (HTTP 상태 302) 리다이렉션을 보낸다. 즉, 클라이언트에게 자원을 임시로 옮겼다고 알린다. status 아규먼트를 사용하여 다른 HTTP 상태코드를 반환할 수 있다:

permanent
  자원을 완전히 옮겼음을 뜻하는 영구 리다이렉션 상태를 (301) 반환한다.
temp
  임시 리다이렉션 상태를 (302) 반환한다. 기본값이다.
seeother
  자원이 교체되었음을 뜻하는 "참조 (See Other)" 상태를 (303) 반환한다.
gone
  자원이 영구히 삭제되었음을 뜻하는 "소멸 (Gone)" 상태를 (410) 반환한다. 이 상태를 사용하면 URL 아규먼트를 사용할 수 없다.

status에 숫자 상태코드를 사용하여 다른 상태코드도 반환할 수 있다. 상태가 300과 399 사이라면 URL 아규먼트를 사용해야 하고, 아니라면 생략해야 한다. 단, 아파치 코드에 상태가 정의되있어야 한다 (http_protocol.c의 `send_error_response` 함수 참고).

### 예제:

`Redirect permanent /one http://example.com/two
Redirect 303 /three http://example.com/other`

## RedirectMatch 지시어

설명: | 현재 URL이 정규표현식에 해당하면 외부 리다이렉션을 보낸다
문법: | `RedirectMatch [status] regex URL`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
Override 옵션: | FileInfo
상태: | Base
모듈: | mod_alias

이 지시어는 `Redirect`와 같지만, 간단히 URL의 앞부분만 비교하는 대신 표준 정규표현식을 사용한다. 지정한 정규표현식을 URL 경로와 비교하여 맞다면, 서버는 괄호로 묶은 부분을 대체하여 파일명으로 사용한다. 예를 들어, 다음은 모든 GIF 파일 요청에 대해 다른 서버의 비슷한 이름을 가진 JPEG 파일로 리다이렉션을 보낸다:

`RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg`

## RedirectPermanent 지시어

설명: | 클라이언트가 다른 URL에 접속하도록 요청하는 외부 영구 리다이렉션을 보낸다
문법: | `RedirectPermanent URL-path URL`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
Override 옵션: | FileInfo
상태: | Base
모듈: | mod_alias

이 지시어는 클라이언트에게 리다이렉션이 영구적임을 (상태 301) 알린다. `Redirect permanent`와 정확히 같다.

## RedirectTemp 지시어

설명: | 클라이언트가 다른 URL에 접속하도록 요청하는 외부 임시 리다이렉션을 보낸다
문법: | `RedirectTemp URL-path URL`
사용장소: | 주서버설정, 가상호스트, directory, .htaccess
Override 옵션: | FileInfo
상태: | Base
모듈: | mod_alias

이 지시어는 클라이언트에게 리다이렉션이 임시적임을 (상태 302) 알린다. `Redirect temp`와 정확히 같다.

## ScriptAlias 지시어

설명: | URL을 특정 파일시스템 장소로 대응하고 대상이 CGI 스크립트라고 알린다
문법: | `ScriptAlias URL-path file-path|directory-path`
사용장소: | 주서버설정, 가상호스트
상태: | Base
모듈: | mod_alias

`ScriptAlias` 지시어는 `Alias` 지시어와 비슷하지만, 추가로 대상 디렉토리에 `mod_cgi`의 cgi-script 핸들러가 처리할 CGI 스크립트가 있다고 알린다. URL-path로 시작하는 (%로 인코딩된) URL을 파일시스템의 절대경로인 두번째 아규먼트로 시작하는 스크립트에 대응한다.

### 예제:

`ScriptAlias /cgi-bin/ /web/cgi-bin/`

`http://myserver/cgi-bin/foo`를 요청하면 서버는 `/web/cgi-bin/foo` 스크립트를 실행한다.

## ScriptAliasMatch 지시어

설명: | 정규표현식을 사용하여 URL을 특정 파일시스템 장소로 대응하고 대상이 CGI 스크립트라고 알린다
문법: | `ScriptAliasMatch regex file-path|directory-path`
사용장소: | 주서버설정, 가상호스트
상태: | Base
모듈: | mod_alias

이 지시어는 `ScriptAlias`와 같지만, 간단히 URL의 앞부분만 비교하는 대신 표준 정규표현식을 사용한다. 지정한 정규표현식을 URL 경로와 비교하여 맞다면, 서버는 괄호로 묶은 부분을 대체하여 파일명으로 사용한다. 예를 들어, 다음과 같이 표준적인 `/cgi-bin`을 사용할 수 있다:

`ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1`