mod_rewrite とmod_asis を使って任意のステータスコードを返す

あるディレクトリ以下に限り、存在しないファイルにリクエストされたときに
404 ではなく204 を返す必要があったので以下のような設定をした。


.htaccess の場合

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /path/to/204.asis


httpd.conf の場合

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^/path/to/.*$ /path/to/204.asis


204.asis

Status: 204 No Content
Content-type: text/html


mod_asisを使うと、ステータスコードも含めてテキストに書いたままの内容で
ブラウザにレスポンスが送信される。
204.asis の下に改行を二つ入れているのはそのため。


はじめはmod_asis の存在を知らず以下のようなCGI をでっち上げていた。

204.cgi

#!/usr/bin/perl

use strict;
print "Status: 204 No Content\n";
print "Content-Type: text/plain\n\n";


__END__


IRC でアドバイスをくれたhasegaw blog の中の人に感謝(2回目)。