myfinderの技術や周辺的活動のblog

2008年12月1日月曜日

RewriteRuleに独自処理をかませたい

RewriteMapでPerlとかに渡せます。

例えば、リダイレクト先に渡すパラメタのエンコード文字列を大文字にしたい、とか。

RewriteCond %{HTTP_HOST} ^.*\.www\.myfinder\.jp$
RewriteCond %{REQUEST_URI} ^/contents/.*$
RewriteMap escape-map prg:/usr/local/bin/escape.pl
RewriteRule ^/contents/(.*)$ http://redirect.myfinder.jp/contents/${escape-map:$1} [NE,R=301,L]

escape.plの内容ですが、標準入力から受け取った値を処理して返すというのが基本です。
注意しなければならないのは、ここでエラーが発生してプログラムが止まると、Apacheごと止まる可能性があることです。
使う場合は細心の注意を払って組まないと大変な目に遭うかも。
また、プログラムを更新した場合はApacheの再起動が必要です。

#!/usr/bin/perl

$| = 1;

while (<>) {
chop;
foreach $ch (split //, $_) {
if ($ch =~ /^[a-zA-Z0-9-_.*]/){
print $ch
} else {
$ch =~ s/([^\w])/'%'.unpack('H2', $1)/eg;
$ch = uc $ch;
print $ch
}
}
print "\n";
}

0 件のコメント: