カラクリスタ

『輝かしい青春』なんて失かったヒトのブログ

Apacheで任意の拡張子に対してCGIスクリプトを適用する

概要: Apacheで任意の拡張子に対してCGIスクリプトを適用する。


Apacheで任意の拡張子とかファイルタイプに対してスクリプト適用できないかなー とちょっと調べてて、見事にあったのでメモ。

任意のファイルにスクリプト適用するにはActionディレクティブと AddHandlerディレクティブ使えばいいっぽい。

こんな感じ。

AddHandler my-file-type .foo
Action my-file-type /path/to/script.cgi

正確なことはApacheのmod_actionsのドキュメントに載ってる。 スクリプトのパスはdocument rootからのフルパスで指定しないとダメっぽい。

で、本来返されるファイルのパスは環境変数PATH_TRANSLATEDから取れる。 あと確認した範囲ではPATH_INFOにもdocument rootからのパスがセットされてた。

テストするにはこんな感じのスクリプトを使った。

#!/usr/bin/perl
use strict;
use warnings;
print "Content-type: text/plain\n\n";
for my $name ( sort keys %ENV ) {
    print "$name\n\t= $ENV{$name}\n\n";
}

で、これ何に使えるか考えたんだけど、Plaggerの設定ファイルにAction設定してファイルにアクセスするだけで、 Plaggerが実行される!というのは負荷の問題で大変危険な気がするので却下したけど、 例えばHTMLファイルをTemplate Toolkit通して出力するとか、 あと記法なんかが書かれたファイルに対して記法をHTMLに変換して返す、とか色々できそう。

簡易Wikiというか、簡易CMSというかそういった類のものは作れそうな気がする。 ほかのHTTP Serverでもできるのかどうかは知らない。多分モジュールがあればできると思うけど。

ちなみにさくらインターネットではできたけど、Apacheのmod_actionsが使えないとか .htaccess使えないとかそういった場合は当然できない。

けど、まあアイディアがあれば色々できそうです。