Apache | 콘텐츠의 설치 | 디렉터리 인덱스 (DirectoryIndex)
Apache는 파일에 접근 시에 디렉터리만 지정될 경우에 기본으로 반환하는 파일을 “DirectoryIndex"로 지정한다.
디렉터리 인덱스 (DirectoryIndex)
클라이언트의 요청이 있을 때, 파일명을 지정하지 않고 디렉터리만 지정될 경우가 있다. 파일명이 생략된 경우에 어떤 파일을 반환할까를 “DirectoryIndex"로 지정한다.
DirectoryIndex 파일명 [파일명 [...]]
파일명은 하나 이상을 지정할 수 있다.
그러면 “httpd.conf"파일에서 “DirectoryIndex"로 검색해 보면, 다음과 같은 내용을 찾을 수 있을 것이다.
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
기본 설정으로 “index.html"이 지정되어 있다. 그러므로 “http://localhost/“로 클라이언트에서 요청하면 실제로는 “http://localhost/index.html"가 존재하는지 여부를 확인하고 있는 경우에 그 파일을 보내준다.
디렉터리 인덱스에는 여러 파일을 지정할 수 있다. 파일은 공백으로 구분하여 이어서 작성한다. 여러 파일을 작성되면, 앞에서부터 순서대로 작성된 파일이 존재하는지 확인하고 있다면 경우에는 그 파일을 표시한다.
DirectoryIndex index.html index.htm index.php
이와 같은 경우는 “index.html”, “index.htm”, “index.php"를 순서대로 검색하여 찾아서 존재하는 파일을 클라이언트에 반환한다.
실습
그럼 다음과 같은 간단한 HTML 파일을 작성하여 문서 루트 디렉터리에 넣어보자.
hello.html
<html>
<head><title>Apache</title></head>
<body>
<h1>Hello World devkuma!</h1>
</body>
</html>
그리고 “DirectoryIndex"을 다음과 같이 작성한다. 혹시 이미 Apache가 켜져 있다면 재기동해야 변경된 내용이 반영된다.
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex hello.html index.html
</IfModule>
브라우저를 시작하여 다음 URL에 접근한다.
http://localhost/
“DirectoryIndex"에 “hello.html” 파일이 가장 앞에 작성이 되어 있기에 디렉터리만 지정했을 때 먼저 “hello.html “를 검색하고 파일이 존재하여 그 파일이 표시되었다.
그럼 “DirectoryIndex"은 그대로 두고 “hello.html"를 문서 루트에서 다른 곳으로 이동하려고 한다. 도큐먼트 루트( \htdocs)에 bak 디렉터리를 만든고 거기로 이동시킨다. 그리고 다시 브라우저로 “http://localhost/“에 접근한다.
이번 경우는 “hello.html"를 먼저 찾고 파일이 존재하지 않기에 다음 후보인 “index.html"을 찾는다. 그리고 “index.html"이 존재하여 파일을 내용을 클라이언트에 반환한다.
그럼 “DirectoryIndex"은 그대 두고 “index.html"문서 루트에서 다른 곳으로 이동하려고 한다. 이 파일 역시 bak디렉터리를 이동시킨다. 그리고 다시 브라우저로 “http://localhost/“에 접근한다.
“DirectoryIndex"에 지정된 파일이 전부 찾을 수 없는 경우는 그 디렉터리에 포함된 파일 및 디렉터리 목록을 표시한다. 단, 파일 목록이 표시되는 것은 보안 상 문제도 있기 때문에 일반적으로 파일 목록이 표시되지 않도록 설정되어 것이 좋다. (설정 방법은 다른 페이지에서 확인한다)