前提または仮定。このエラーメッセージを出すのは Apache Web Server ?
普通のドキュメントのだと ディレクトリが指定されたときに index.html とか index.php とか を表示してくれます。
http://www.example.com/foo/がリクエストされた -> /foo/ のディレクトリの(例えば)index.html を返す
同じように cgi でもディレクトリが指定されたらそのディレクトリにある デフォルトを起動して欲しいと思います。
http://www.example.com/cgi-bin/foo/がリクエストされた -> /cgi-bin/foo/ のディレクトリの(例えば)index.cgi を返す
そのために /cgi-bin/foo/ に .htaccess を置いて次のように書きました。
DirectoryIndex index.cgi
そして http://www.example.com/cgi-bin/foo/ にアクセスすると エラーになりそのときのログを見ると
[Sat Dec 22 11:20:13 2006] [error] [client 192.0.2.1] attempt to invoke dire ctory as script: /home/httpd/cgi-bin/foo
となっています。なにがいけないでしょう。
そういうものらしいです。
apache のソースをエラーメッセージで grep してみると確かにディレクトリの 場合はエラーにしています。
http://svn.apache.org/viewvc/httpd/httpd/tags/2.0.59/modules/generators/mod_cgi.c?revision=426155&view=markup static int cgi_handler(request_rec *r) { . . . if (r->finfo.filetype == APR_DIR) return log_scripterror(r, conf, HTTP_FORBIDDEN, 0, "attempt to invoke directory as script");
mod_cgiが使われるのはそう設定しているからですね。手元ではhttpd.conf で次 のように設定していました。
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
ドキュメントを見てみます。
http://httpd.apache.org/docs/2.0/ja/mod/mod_alias.html#ScriptAlias ScriptAlias ディレクティブは、対象ディレクトリに mod_cgi の cgi-script ハンドラで処理される CGI スクリプトがあることを示す以外は Alias ディレ クティブと同じ振る舞いをします。
つまり /cgi-bin はスクリプトだよと指定されたからディレクトリなんて知らな いよということです。
普通のドキュメントで DirectoryIndex を処理するのは mod_dir です。 http://httpd.apache.org/docs/2.2/ja/mod/mod_dir.html
なぜmod_dirが適用されるのか私には把握できてないのですが。あと適当にググっ ているんで参照/引用しているapacheのバージョンが 2.0だったり2.2 だったり適当で す。ごめんなさい。
あきらめて ファイル名まで指定しましょう。
apacheの設計者達はディレクトリが指定された場合のサーバーの振舞いを一 般のドキュメントディレクトリとスクリプトディレクトリとで違うようしたわけ です。実行されるファイルが曖昧というか判りずらくなるのを避けたのかもしれ ません。
それでも実現する方法はあります。実際のサイトで利用して問題ないかはご 自分で判断してください。
ErrorDocument 403 /cgi-bin/hoge/index.cgi
日本の法律だと著作権の人格権の放棄ができないようなので CCの BY: 条件を付 けて表示しているけれど public domain として扱ってくれてかまいません。