WikiFarm を動かす (3)
さっきも書いたけど、WikiFarm のプログラムが /bc/farm.cgi に設置されているとすると、 WikiFarm の URL は
http://www.example.com/bc/farm/[ノード名]/[ページ名]
となる。 でも、どうしても farm が冗長な気がする。
http://www.example.com/bc/[ノード名]/[ページ名]
でアクセスできたほうがシンプルでいい。 mod_rewrite が使えれば変換ルールを書いておしまいなんだろうけど、 残念ながらさくらでは使えない。 なので、tDiary と同じように ErrorDocument を使った方法で検討してみる。
まずは .htaccess に以下のように記述する。
DirectoryIndex farm.cgi ErrorDocument 404 /bc/farm.cgi
こうしておいて、
http://www.example.com/bc/testwiki/FrontPage
にアクセスすると、そのファイルは見つからないので、 /bc/farm.cgi が起動することになる。 そして、 farm.cgi が受け取る環境変数は、
REDIRECT_URL=/bc/testwiki/FrontPage SCRIPT_NAME=/bc/farm.cgi
となる。 本来なら、
PATH_INFO=/testwiki/FrontPage
となってほしいので、farm.cgi の起動時に環境変数を書き換えるように、farmrc の setup_environment に以下を追加した。
if ENV['REDIRECT_URL'] ENV['QUERY_STRING'] = ENV['REDIRECT_QUERY_STRING'] path_info = String.new(ENV['REDIRECT_URL']) path_info[File.dirname(ENV['SCRIPT_NAME'])] = '' path_info.insert(0, '/') if path_info[0, 1] != '/' ENV['PATH_INFO'] = path_info end
これで短い URL でアクセスできるようになった! …と思ったら落とし穴が。 表示はうまくいくけど、ページの編集ができない。 どうやら、 ErrorDocument で転送した時点で、 POST されたデータは CGI に渡されなくなってしまうみたい。
う〜ん、ぬか喜び。編集時だけ URL を変えるのも面倒だしなぁ。