mod_rewrite を使った簡易的なキャッシュ

簡易的なページのキャッシュ方法。ログイン状態で表示切替えが必要なページには使えないが、ブログの記事のように出力結果が静的でページの生成が重い場合は効果が期待できる。

参考: http://d.hatena.ne.jp/ruby-U/20090131/1233372302

  1. mod_rewrite でキャッシュがあるかを判別
    1. あればキャッシュを返す
    2. なければ PHP に処理が渡る
  2. PHP は キャッシュを生成してから HTML を返す
  3. キャッシュは cronで定期的に削除される

.htaccess 例:

<IfModule mod_rewrite.c>
   RewriteEngine on

   # hoge/xxxx/ のキャッシュ cache/hoge/xxxx.html があるかを判別する
   RewriteRule ^hoge/([0-9a-z]+)/?$ cache/hoge/$1.html [L]

   # なければ fuga.php に処理を渡し、キャッシュを生成する
   RewriteCond %{REQUEST_FILENAME} !-s
   RewriteRule ^cache/hoge/(.+)$ fuga.php?page=$1 [L]
</IfModule>

ふと、mod_cache を使ったほうがいいのかも?と思ったが、使えるモジュールが限られている環境の場合は、一つの選択肢としてありかと思った。