RewriteRuleによるパターンマッチング
いつもお世話になっております。
RewriteRuleによるパターンマッチングで特定のファイルを外部の画像配信サーバより配信させてたいと考えておりますが上手くいっておらず行き詰っております。
前提・補足情報・現在発生している問題など記載しますので、どなたかお分かりになるようでしたらご支援いただけますと大変助かります。
◆サイトの構造
htdocs
|_ hoge
|_ lib
◆前提
/htdocs/lib/movies/hoge/配下にmp4・swf・swfを配置しているが、
そのサイズが大きいため外部の画像配信サーバにキャッシュさせている。
そのため、mp4・swf・swfなどのファイルに対するリクエストがあった場合、
mod_rewriteによって外部の画像配信サーバにリダイレクトさせ外部サーバより
クライアントにダウンロードさせるようにする。
◆補足事項
mp4・swf・swfなどのファイルは、クライアントが/htdocs/hoge/index.phpをHTTPでGETすると、index.phpの内部で次の通り呼び出されクライアントに渡される構造となっている。
<source src="..lib/movies/hoge/hoge123.mp4">
◆現在の問題点
.htaccessに次のようにRewriteRuleを定義しているが、
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RewriteRule ^(.*)\.(flv|mp4|3gp|jpg|gif|png)$ http://test.hoge.hoge.net/$1.$2 [NC,R,L]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rewrite_logをみると、
172.16.10.78 - - [12/Apr/2012:10:44:09 +0900] [172.24.133.81/sid#94d0478][rid#98e0880/initial] (3) [perdir /home/hoge/www.hoge.jp/htdocs/] applying pattern '^(.*)\.(flv|mp4|3gp|jpg|gif|png)$' to uri 'present/index.php'
172.16.10.78 - - [12/Apr/2012:10:44:09 +0900] [172.24.133.81/sid#94d0478][rid#98e0880/initial] (1) [perdir /home/hoge/www.hoge.jp/htdocs/] pass through /home/hoge/www.hoge.jp/htdocs/present/index.php
index.phpに対してパターンマッチングしているため、flv|mp4|3gp|jpg|gif|pngらのファイルを外部サイトからGETするよう想定通りのリダイレクトができてきない。
◆疑問
mod_rewriteの動きとして、上述のようにクライアントが直接HTTP GETせず、
phpを経由してflv・mp4を取得する場合、
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RewriteRule ^(.*)\.(flv|mp4|3gp|jpg|gif|png)$ http://test.hoge.hoge.net/$1.$2 [NC,R,L]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
このような記述では、mod_rewriteのRewriteRuleによるパターンマッチングは有効とはらないのでしょうか?
また、仮に次のように定義した場合、
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RewriteCond %{REQUEST_FILENAME} "\.(flv|mp4|3gp|jpg|gif|png)$"
RewriteRule ^(.*)\.(flv|mp4|3gp|jpg|gif|png)$ http://test.hoge.hoge.net/$1.$2 [NC,R,L]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
想定通りのパターンマッチングとなり、
test側へリダイレクトされるようになったりしますでしょうか?
お礼
たびたびありがとうございます。 'REQUEST_URI'を使うと取ることが出来ました・・・ ただ$1で取った方が慣れていて、楽で良いなあとおもったのですが・・・ RewriteRuleの書き方の例はたくさんあるのですが、 結構くせがあるらしく、なかなか思い通りに行きませんでした。 ほとんどのページにかかれている例のように以下のようにすると RewriteRule ^/(.*) index.php?$1 http://url/abc ではアクセスできなくなり、 なんとhttp://url//abc でabcが取れるようになりました。 なかなか難しいんですね。。。