UNIX的なアレ:gihyo.jp出張所

第14回 知っておきたいApacheの基礎知識 その10

この記事を読むのに必要な時間:およそ 2 分

RewriteRuleの書き方

それではRewriteRuleの書き方を見ていきましょう。RewriteRuleの書式は以下の通りとなっています。

RewriteRule 書き換え前のURL 書き換え後のURL [オプション]

上記のルールをサンプルの設定ファイルに当てはめてみると以下のようになります。

書き換え前のURL

^/cgi-bin/index\.pl/([0-9a-z]+)/([0-9a-z]+)$

書き換え後のURL

/cgi-bin/index\.pl?id=$1&name=$2

正規表現に慣れていないとちょっとつらいかもしれません。ここでポイントとなるのは,書き換え前の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行の部分です。

RewriteLogLevel 9
RewriteLog  /tmp/rewrite.log

rewriteの設定中はLogLevelを最高レベルの9に指定しておくのがよいでしょう。どこまでマッチしたのか,という情報までLogとして出されるのでとても便利です。しかし,このままだとLogの量が膨大になってしまうのでサービスとして利用する場合は設定を外すように注意してくださいね。

最後に

さて,今回は前回より実践的なmod_rewriteの設定方法について紹介をしました。この知識があれば,ある程度柔軟な設定に対応することも可能でしょう。しかし,mod_rewriteにはまだまだいろいろな機能が実装されています。次回は応用的な使い方について紹介をしていきたいと思います。

著者プロフィール

和田修一(わだしゅういち)

株式会社ロケットスタートCTO。PHPやPerlを中心としたアプリケーション開発から,Linuxなどの技術を中心としたインフラ系の設計・構築を担当。個人Blogは「Unix的なアレ」。