2月 052012
 

Varnishでリダイレクトを行うのは結構めんどくさいです。
たとえばuser-agentにiphoneかipodを含む場合にそれ用のページにリダイレクトする場合は以下のようになります


sub vcl_recv {
  if (req.http.user-agent ~ "iP(hone|od)") {
    error 750 "Moved Temporarily";
  }
}

sub vcl_error {
  if (obj.status == 750) {
    set obj.http.Location = "http://www.example.com/iphoneversion/";
    set obj.status = 302;
    return(deliver);
  }
}

(via:Redirecting using VCL)

ただリダイレクトしたいだけなのに二箇所のアクションでコードを書かなくてはいけません。
これは保守性に欠けると思いますし個人的にあまり好みではありません。

そこで簡単にリダイレクトができるvmod_redirectを作って見ました。

先ほどのコードと同じ事をvmodを使うと


import redirect;
sub vcl_recv {
   if (req.http.user-agent ~ "iP(hone|od)") {
      error(redirect.location(302,"http://www.example.com/iphoneversion/") , "Moved Temporarily");
   }
}

と二箇所に分けずに書かなくて済みます。

もし説明句が必要なければ


import redirect;
sub vcl_recv {
   if (req.http.user-agent ~ "iP(hone|od)") {
      error(redirect.location(302,"http://www.example.com/iphoneversion/"));
   }
}

で済みます。
ちなみにerrorで囲むのは必須なので注意してください。
もし良かったら使ってみてください。

ダウンロードはこちら
libvmod-redirect


2012-02-17
名前をvmod_rewriteからvmod_redirectに変えました

English article is here.


 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)