私達はあるサイトへアクセスする時によく `http://www.foo.com/' というような URI を入力する。HTTP での URI は WWW 上のリソースを示す識別子であり、最も典型的なそれは目的の HTTP サーバー上にあるファイルを示す。では `http://www.foo.com/' の示すリソースとは何であろうか。これは実際には、ホスト www.foo.com 上の / というリソースを指している。/ とはホストのルートディレクトリー (実際には仮想のルートディレクトリー) であり、つまりこれはファイルに対してのリクエストではなく、ディレクトリーに対してのリクエストとなる。もちろん HTTP でディレクトリー自体をレスポンスすることはできないため、通常はエラー 403 (閲覧禁止) をレスポンスする。しかし現実には `http://www.foo.com/' はそのサイトのトップページである HTML ファイルをレスポンスするだろう。Apache ではこのディレクトリーへのリクエストに対し、2 通りの方法でそのディレクトリーに代わる代替のリソースをレスポンスできる。
Apache ではディレクトリーに対しリクエストがあった時、ユーザーの用意した代替ファイルをレスポンスすることができる。これは単純に代替ファイル名を指定しておき、そのファイルがリクエストされたディレクトリーの中に存在すればレスポンスするというものである。
LoadModule dir_module modules/mod_dir.so
DirectoryIndex index.xhtml index.html
この機能はモジュール mod_dir によって提供される。またディレクティブ DirectoryIndex には代替ファイル名を空白区切りで記述する。より前に記述されたファイル名が優先される。全てのファイル名が存在しなければエラー 403 をレスポンスする。
Apache ではディレクトリーに対しリクエストがあった時、そのディレクトリーに含まれるリソースを一覧にした HTML (XHTML) を自動生成し、レスポンスすることができる。これはちょうどそのディレクトリーに対し UNIX の ls コマンドを実行する時とよく似ている。ただしディレクトリー内を不用意に覗かれることはセキュリティー上好ましくないため、注意して使用する必要がある。
LoadModule autoindex_module modules/mod_autoindex.so
Options Indexes
この機能はモジュール mod_autoindex によって提供される。またディレクティブ Options に値 Indexes を指定することによりこの機能は有効となる (ディレクティブ Options とその値である Indexes 自体は Apache コアにより提供される)。例 2 は最低限の設定であり、ここでは説明しないが、実際には一覧の表示方法に関する様々なオプションが指定できる。
ホスト www.foo.com に存在するディレクトリー dir をリクエストすることを考える。ただしこのリクエストはエラー 403 (閲覧禁止) をレスポンスするものとする。ここで モジュール mod_dir の働きに注目する。URI `http://www.foo.com/dir' でリクエストすると、mod_dir がロードされていない Apache では当然エラー 403 がレスポンスされる。mod_dir をロードしてリクエストしても、やはりエラー 403 がレスポンスされる。しかしよく見ると mod_dir をロードしてリクエストした方では、`http://www.foo.com/dir' にリクエストしたはずが、`http://www.foo.com/dir/' にリクエストしたことになっている。実は mod_dir がわざわざ `http://www.foo.com/dir/' へのリダイレクト (*1) をレスポンスしたのである。mod_dir は URI の末尾に / がないディレクトリへのリクエストを受けた場合、末尾に / を付けた URI へのリダイレクトを発行する。そして再びリクエストを自身で受け取って再度レスポンスする。

なぜこのような動作をするのだろうか。ここで注目すべきことは末尾の / の意味である (*2)。一般的な URI では `http://www.foo.com/dir' と `http://www.foo.com/dir/' は厳密に区別される。つまり全く別の物である。しかし HTTP スキーム (*3) に限って見る限り、2 つの URI はほとんどの場合、同じリソースを指している (*4)。つまりどちらが正しい URI ということはなく、どちらも同じディレクトリーを指している。ではなぜわざわざ / を付けるのかというと、ディレクトリーへのリクエストでレスポンスされるリソースの中に相対 URI が含まれる場合、正常に機能しないという問題が起こるからである。次の様な例を考えてみる。`http://www.foo.com/dir' と `http://www.foo.com/dir/' はそれぞれある HTML ファイルをレスポンスする (*5)。そしてその HTML ファイルからは `sub/2nd.html' に相対リンクしている。

つまりクライアント側からすると、`http://www.foo.com/dir' というリソースは ホスト www.foo.com の / (ルート) に属する dir というリソースと捉え、`http://www.foo.com/dir/' というリソースはホスト www.foo.com の / に属する dir に属する空のリソースと捉えるために、相対 URI が示すリソースが異なってくるのである。結果的には末尾に / の付く URI はディレクトリーを指し、付かない URI はファイルを指すと考えられるが、実際にはその様な記述は URI の仕様上には一切記述されていない。この相対 URI の問題を避けるため、mod_dir ではリダイレクト機能を提供してくれる。ここで注意しなければならないことは、`http://www.foo.com/' の末尾の / はホストの起点を意味するもので、他の / は単なる区切り子であるのに対し、特別な意味合いを持っていることである。このため `http://www.foo.com' という / なしの URI は、`http://www.foo.com/' の / が省略されたものと考えられ、全く同等であると HTTP の仕様上明記されている。よって末尾の / が付いていなくても必ず付いているものとして処理され、リダイレクトはレスポンスされない。