カラクリスタ

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 使えないとかそういった場合は当然できない。

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

#FIXME