ApacheでRewrite設定をする時に、RewriteMapを使うと設定ファイルがすっきりいい感じになったのでメモ。
RewriteMapを使うことで、RewriteRuleを書きまくる必要がなくなるので、記述の簡素化や運用の効率化ができるようになります。
実際にRewirteMapをつかってみる
例として、都道府県の情報を検索する画面で
http://example.com/hokkaido.html
http://example.com/aomori.html
(中略)
http://example.com/okinawa.html
上記のURLを以下に書き換えるとします。
http://example.com/pref.php?pref_id=01
http://example.com/pref.php?pref_id=02
(中略)
http://example.com/pref.php?pref_id=47
RewriteMap用ファイルの準備
まず、RewriteMapを作成します。
pref-map.txt
---
hokkaido 01
aomori 02
(中略)
okinawa 47
Apache設定ファイルの編集
Apaheの設定ファイルの中にRewriteMapの設定を記述します。
RewriteMapは以下のように記述します。
RewriteMap 名前 "タイプ:ファイル名"
多くの場合、タイプはtxtとすればよいでしょう。
RewriteMapは.htaccessには記述できませんので、気を付けましょう。
RewriteEngine on
RewriteMap pref-map "txt:/var/www/data/pref-map.txt"
そして、RewriteRuleを指定します。
RewriteRule ^(.*).html pref.php?pref_id=${pref-map:$1}
以上で完了です。
あとはApacheを再起動すれば、http://example.com/hokkaido.html にアクセスすると
http://example.com/pref.php?pref_id=01 へリライトされるようになります。
RewriteMapのタイプについて
Apache設定ファイルの編集の部分でも少し触れましたが、RewriteMapのタイプには5つの種類があります。
既存のRewriteRuleの設定をRewriteMapで補うのであればtxtの設定方法だけ知っておけばよいと思います。
- txt
- スペース区切りの一覧表
- rnd
- txt で値が複数指定されたものがランダムで選択
- prg
- 独自のプログラムを使う
- dbm
- SDBM/GDBM などが使える
- dbd
- SQL でデータベースにアクセス