読者です 読者をやめる 読者になる 読者になる

mod_rewriteに花束を

apache

とある事情により、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を使用。