RewriteRule RewriteCond

こんにちは、雑草です。学んだこと書いていくつもりなので宜しくお願いします。

面倒なんすよね結構。。。
例えばこんなの

http://hogehoge.com/hoge.do?value(abc)=123
↓
http://hogehoge.com/search/?test=123

全く違うURLへ変換しないといけないのと、QUERY_STRINGを引っこ抜かなきゃだめなのが面倒だった。

RewriteCond %{QUERY_STRING} ^value(abc)=(d*)$
RewriteRule /hoge.do$ /search/?test=%1? [R,L]

RewriteCondを利用してQUERY_STRINGを引っこ抜いてます。それで、元のURL上の「123」を取得するには正規表現で(d*)を使う。※()はグルーピングで、dは数値。*は、数を限定しない場合。
最初、/search/?test=$1?って書いてたんですが、うまくいかなかったのでもしやと思い調べてみたら、%1で値を参照できるらしく、これでやるとうまくいきました。

もう一つ違うの紹介します。

http://hogehoge.com/hoge/aaa/bbb/A1234V34.html
↓
http://hogehoge.com/cc/1234.html

の変換なんですが、要は「A1234V34.html」から「1234」を引っこ抜いて、URLにくっつけるというものです。

RewriteRule ^/hoge/aaa/bbb/[A-Z](d*?)[A-Z](.*?).html /cc/$1.html [R,L]

[A-Z]は、アルファベット大文字1文字を現していて、(d*?)は上で説明したとおり数値です。

%1と$1の違い、もう少し掘り下げていきたいと思います。