- http://norainu.net/mt/archives/2005/08/multiviewsmatch.html
- http://httpd.apache.org/docs/2.2/ja/mod/mod_mime.html#multiviewsmatch
- http://httpd.apache.org/docs/2.2/ja/content-negotiation.html#extensions
MultiViewsを使うとファイルの拡張子を省略したURIでもアクセスできるんだけど、これってば(デフォルトでは)mod_mimeに認識される拡張子だけなんすねー。
モジュール版で入れてAddTypeで設定したphpはは拡張子なしでアクセスできたけど、AddHandlerで設定したcgiは拡張子なしでアクセスできなくて不思議だったのだ。
実験してた設定
/foo/index.html.phpと/bar/index.html.cgiを用意。
AddType application/x-httpd-php .php AddHander cgi-script .cgi
これで4つのURLにアクセスしてみた。
$ curl http://example.com/foo/index -o /dev/null -w "%{http_code}\n" 2> /dev/null 200 $ curl http://exmaple.com/foo/index.html -o /dev/null -w "%{http_code}\n" 2> /dev/null 200 $ curl http://exmaple.com/bar/index -o /dev/null -w "%{http_code}\n" 2> /dev/null 404 $ curl http://example.com/bar/index.html -o /dev/null -w "%{http_code}\n" 2> /dev/null 404
ただし、index.html.cgiの場合はアクセスしてもnot foundになった。
phpだけアクセスできた理由
参照したblogとapacheのdocumentによると、MultiViewsが働くのはデフォルトでmod_mimeで設定されている拡張子のみとのこと。(MultiviewsMatch NegotiatedOnly)
NegotiatedOnlyオプションでは、ベース名に続く拡張子全てが コンテントネゴシエーションで
mod_mimeが認識する拡張子(例 文字セット、コンテントタイプ、言語やエンコーディング) に
関連付けられていなければなりません。これは副作用の最も少ない 最も的確な実装で、デフォルトになっています。
ちゅーわけなので、cgiの設定を
AddHandler cgi-script .cgi
としている場合ハンドラなので、デフォルトでは動かないってこと??