インフラエンジニアbacchiのわかったことまとめ

bacchi.me

ApacheでRewrite設定はRewriteMapを使うといい感じになる

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 でデータベースにアクセス

参考Using RewriteMap

  • B!