さて、前回はmod_rewriteの基本的な動作を説明しました。mod_rewriteができることの概念は理解できているかと思います。今回は、より実践的なmod_rewriteの使い方に踏み込んでいきたいと思います。
CGIを有効にする
まずはmod_rewriteに取り掛かる前にやるべきことがあります。QueryStringで受け取った値を参照したりしたいため、アプリケーションを稼働させる環境を作りましょう。
今回はmod_cgiを利用して、perlで設定してみようと思います。
それでは現在使用しているVirtualHost内にCGIの設定を追加しましょう。
下記の設定を追加してください。
これで/usr/local/apache2/cgi-bin/配下のファイル実行することが可能となりました。それでは引き続き、確認用のプログラムの配置を行いましょう。
以下のファイルパスに確認用のプログラムを設置してください。
内容は、QueryStringで受け取ったパラメーターの値を表示するだけのシンプルなスクリプトです。
上記のパスにファイルを設置したら実行権限を追加して、Apacheを再起動後ブラウザからアクセスしてください。
- http://servername/cgi-bin/index.pl?id=foo&name=bar
図1のように表示されればCGIの設置完了です。
mod_rewriteでつくる簡潔なURL
さて、URLの中に?が入っているとSEO的に不利なことは前回簡単に説明いたしました。しかしながら、先ほどのサンプルのURLには?が含まれたURLになっています。まずはこれを書き換えるようにしてみましょう。
以下の通りに書き換えます。
それでは、上記のパターンを可能にするmod_rewriteの設定を行っていきましょう。下記の設定ファイルを見てください。
RewriteRuleが追加されていることが確認できましたか?Apacheを再起動後、以下のURLにアクセスしてみてください。
- http://servername/cgi-bin/index.pl/foo/bar
図1と同じものが表示されれば成功です。
RewriteRuleの書き方
それではRewriteRuleの書き方を見ていきましょう。RewriteRuleの書式は以下の通りとなっています。
上記のルールをサンプルの設定ファイルに当てはめてみると以下のようになります。
正規表現に慣れていないとちょっとつらいかもしれません。ここでポイントとなるのは、書き換え前のURLの()でくくられた部分と、書き換え後のURLの$1、$2です。
これは後方参照とよばれるテクニックで、()でくくられた部分を書き換え後のURL内で"$1,$2" と順番に参照しています。
mod_rewriteを使う上で、必須のテクニックなのでこれを機会にマスターしておきましょう。
RewriteRuleのオプション
それでは、最後にオプションをみていきましょう。
上記の例では[PT]と設定しています。実は、これによって/cgi-binの下に設置してあるスクリプトへ値を受け渡すことができるようになっています。
これは、PT(passthrough)と呼ばれる機能で、ScriptAliasなどで設定しているディレクティブへ処理をわたしたいときに利用します。その他に、mod_jkを利用してアプリケーションサーバへ処理を渡している時などにも有効です。
ただし、指定してあるドキュメントルート内だけでrewriteさせる場合はこのオプションは不要なので注意してください。
[TIPS] RewriteLogでrewriteの内容を参照する
いろいろとrewriteを設定してきましたがアプリケーションの構造によってはもっと設定が複雑になることもしばしば。予想以上にrewriteの設定にハマってしまうこともあるでしょう。そんなときは、rewritelogを見てみましょう。今回のサンプルでも、Logを出す設定を入れています。
下記の2行の部分です。
rewriteの設定中はLogLevelを最高レベルの9に指定しておくのがよいでしょう。どこまでマッチしたのか、という情報までLogとして出されるのでとても便利です。しかし、このままだとLogの量が膨大になってしまうのでサービスとして利用する場合は設定を外すように注意してくださいね。
最後に
さて、今回は前回より実践的なmod_rewriteの設定方法について紹介をしました。この知識があれば、ある程度柔軟な設定に対応することも可能でしょう。しかし、mod_rewriteにはまだまだいろいろな機能が実装されています。次回は応用的な使い方について紹介をしていきたいと思います。