SetHandlerとAddHandler

CGIが入ってるディレクトリがスラッシュで指定されたときの動作を指定したくてちょっとはまったのでメモ。
スラッシュで終わるURLがリクエストされたときに返すリソースを指定するのにはDirectoryIndexってのを使ってこんな風にする。

DirectoryIndex index.html

でも、そのディレクトリに対してSetHandlerを使って、たとえばこんな風にすると

<Directory "/cgi-bin">
    SetHandler cgi-script
</Directory >

DirectoryIndexの挙動が上書きされて消えてしまいます。ドキュメントにもちゃんと書いてありました。

注意:SetHandler はデフォルトのハンドラをオーバーライド しますので、通常の挙動、たとえば、スラッシュ (/) で終わる URL が リクエストされたときにディレクトリやインデックスファイルを返すよう取り扱う挙動は、 行われなくなります。
core - Apache HTTP サーバ バージョン 2.2

考えてみると至極もっともな話な気もする。
AddHandlerなら大丈夫だ。

<Directory "/cgi-bin">
    AddHandler cgi-script .cgi
</Directory>
    • -

mod_dir - Apache HTTP サーバ バージョン 2.2
mod_mime - Apache HTTP サーバ バージョン 2.2