とある事情により、CGI実行ファイルが山程できているのだけど、この状態でSpeedyCGIを使うと、やはりたくさんのバックエンドプロセスが常駐してしまう(全てdispatcherへのシンボリックリンクなので山程はできない)。
実のところ、CGI実行ファイルはdispatcherへのシンボリックリンクなので、直接dispatcherを起動させれば良いのだが、URIはdispatcherのファイル名ではなく、元のCGI実行ファイルの名前にしたいため、mod_rewriteを使ってみることに。
まず、以下のような書き方だと/var/www/html/cgi-bin/が見つからないと怒られた(DocumentRootは/var/www/html)。
RewriteEngine on RewriteRule ^/cgi-bin/hoge_dbif/\w+(.*)$ /cgi-bin/hoge_dbif/dispatch\.cgi$1
次に、以下のようにすると302のリダイレクトが発生している模様。
RewriteEngine on RewriteRule ^/cgi-bin/hoge_dbif/\w+(.*)$ http://localhost/cgi-bin/hoge_dbif/dispatch\.cgi$1
RewriteBaseを使おうとすると「RewriteBase: only valid in per-directory config files」と怒られるので、結局以下で。
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" <Directory "/var/www/cgi-bin"> AllowOverride None Options FollowSymLinks Order allow,deny Allow from all RewriteEngine on RewriteBase /cgi-bin/ RewriteRule ^hoge_dbif/\w+(.*)$ hoge_dbif/dispatch\.cgi$1 </Directory>
ちなみにApacheのドキュメントだとSCRIPT_URIで変更前のURIが取得できると書いてあるのだけど、どうも取れなかった。なのでREQUEST_URIを使用。