mod_rewrite - RewriteMap
Rev.2を表示中。最新版はこちら。
作成中RewriteMapを使うとテキスト形式の変換ファイルを使ってURLを書き換えたり、Perl等の外部プログラムを使ってURLを書き換えることができる。
以下ではPerlスクリプトでURLの書き換えを行なう例を示す。
外部プログラムを使用したURL書き換え
サンプルとしてURL書き換えの際、escape(URLエンコード)する書き換えを行なう。escape処理を外部プログラムに行なわせる。RewriteMapでマップ名(以下ではescape-map)と外部プログラム(以下ではescape.pl)を指定する。prg:は外部プログラムであることを意味する。escape.plは標準入力から受け取った文字列をescape(URLエンコード)して返すPerlスクリプト。
escape-mapはRewriteRuleから参照する。${escape-map:$2}は$2をescape-map(つまりescape.pl)で処理して、変換結果を取得することを意味する。つまり${escape-map:$2}は$2がescapeされた文字列になる。
RewriteEngine on
RewriteMap escape-map prg:/usr/local/apache2/conf/escape.pl
RewriteRule ^/(.+)/pg/(.*)$ /$1/index.php?pg=${escape-map:$2} [L]
URLをescapeするPerlスクリプト(escape.pl)
#!/usr/bin/perl
$| = 1;
while (<>) {
chop;
s/([^\w])/'%'.unpack('H2', $1)/eg;
print $_."\n";
}
RewriteLock
最後の改行
$|
スクリプトを修正した場合はApacheを再起動すること。
[関連ページ]
mod_rewriteの使い方