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回目)。