debianのapache2でmod_actionsをつかう

http://httpd.apache.org/docs/2.0/ja/mod/mod_actions.html
をみるとファイルタイプで動作しているものしか例示されていないが以前の自分の実験によるとそれ以外でも動く模様
http://d.hatena.ne.jp/n9d/20030508/1142572938

mod_actionsを利用可能にする

# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/actions.load .
# apache2ctl restart

アクション用のCGIを準備する

$ cat > actions.cgi
#!/usr/bin/ruby
require 'cgi'
a=CGI.new
puts "content-type: text/plain\n\n"
puts "path_info is '#{a.path_info}'"
puts "path_translated is '#{a.path_translated}'"
puts "query_string is '#{a.query_string}'"
$ chmod +x actions.cgi
$ wget -q -O - http://localhost/~$USER/actions.cgi?b=1
path_info is ''
path_translated is ''
query_string is 'b=1'

.htaccessを準備する

アクション名はサーバ名をのぞいたパスにする

$ mkdir actions_test/
$ cat actions_test/.htaccess
Action actionstest /~a/actions.cgi
SetHandler actionstest

実験

「?a=1」タイプのアクセスは大丈夫なのだがそのままディレクトリを記述する方法だとダメだ。

$ wget -q -O - http://localhost/~$USER/actions_test
path_info is '/~a/actions_test/'
path_translated is '/home/a/public_html/actions_test/'
query_string is ''
$ wget -q -O - http://localhost/~$USER/actions_test?a=1
path_info is '/~a/actions_test/'
path_translated is '/home/a/public_html/actions_test/'
query_string is 'a=1'

ここまでは大丈夫なのだが
http://localhost/~$USER/actions_test/aaaa
このタイプのアクセスでは404が出てしまう。
自分の記憶によるとapache2から動作が変わったようなきがする。


このタイプのURLを使うならrewriteのほうがきれいだな。

$ mkdir rewrite_test/
$ cat rewrite_test/.htaccess
RewriteEngine on
RewriteRule (.*)$ /~a/actions.cgi?a=$1
$ wget -q -O - http://localhost/~$USER/rewrite_test/aaa
path_info is ''
path_translated is ''
query_string is 'a=aaa'