参考
queryがついているURLを扱う場合mod_aliasのredirectでは処理できないので、
mod_rewriteを使うことになるが、数が多いと辛くなる。
また変更の度にapache再起動が必要となる。
.htaccess が使える場合、再起動は不要だが、
apacheをreverse proxyとして利用している場合(ProxyPass)、.htaccess は使えない。
mod_mruby 使ったら簡単にできないかな?と思って少し調べたメモ。
使いそうなディレクティブ
- mrubyHandlerMiddle
- mrubyFixupsMiddle
- ProxyPass で扱うURL部分もredirectなどの処理対象にしたい場合はこれ?
- mrubyQuickHandlerMiddle
- フックポイント ap_hook_quick_handler
- RewriteRule で処理しているURLもmrubyで上書きしたい場合はこれ?
mrubyQuickHandlerMiddle /var/www/mruby/redirect.rb
/var/www/mruby/redirect.rb
何もしない場合はapacheの次の処理に渡すので
Apache::DECLINED を使う
csvの処理にmodule使ってなくて、エラー処理もしてない簡単なsample
r = Apache::Request.new s = Apache::Server.new redirect_csv = '/var/www/mruby/redirect.csv' hash = {} File.open(redirect_csv, 'r') do |f| while l = f.gets key, value = l.chomp.split(",") hash[key] = value end end key = r.uri if r.args then key = key + '?' + r.args end if hash[key] then r.headers_out["Location"] = hash[key] Apache::return(Apache::HTTP_MOVED_TEMPORARILY) else Apache::return(Apache::DECLINED) end
redirect.csv
/hoge/,http://example.com/hoge/ /fuga/,http://example.com/fuga/ /hogem?num=10,http://example.com/hogem/?num=10