• 締切済み

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側へリダイレクトされるようになったりしますでしょうか?

みんなの回答

回答No.1

> mp4・swf・swfなどのファイルは、クライアントが/htdocs/hoge/index.phpをHTTPでGETすると、 > index.phpの内部で次の通り呼び出されクライアントに渡される構造となっている。 > <source src="..lib/movies/hoge/hoge123.mp4"> このsrc=は正確に記載していますか? 正しくはsrc="../lib/movies/hoge/hoge123.mp4" だと思います。 また、sourceタグはHTML5でのみ有効なタグですが、 HTML5対応ブラウザで確認していますか? 上記のsourceタグのsrc属性を正しく記述して、 HTML5対応ブラウザで確認すれば、、sourceタグを ブラウザに返した後、再度ブラウザから 「/lib/movies/hoge/hoge123.mp4」にアクセスがあり、 それがRewriteRuleのパターンにマッチしてリダイレクト されることになると思います。

関連するQ&A

  • .htaccessのRewriteRuleの設定

    Sabelというフレームワークでtest用プロジェクトを作成して、 testフォルダ  addonフォルダ  appフォルダ     ・     ・     ・  publicフォルダ   .htaccessファイル というフォルダ構造で、publicフォルダの中に.htaccessファイルがあり内容は [.htaccessファイル] <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} \/\..+$ RewriteRule .* /notfound [R,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule !\.(js|ico|gif|jpg|png|bmp|swf|css|html)$ index.php [QSA,L] </IfModule> URLからのアクセスは、 http://localhost/test/public/index.php/index/index と入力するとちゃんとindexコントローラのページが表示できます(http://localhost/test/public/index.phpでもアクセスできます) ですが自分としては、 http://localhost/test/public/index/index とindex.phpを抜かしてアクセスさせたいのですが、 この.htaccessファイルのままでは、 「404 Not Found 該当するページが見つかりません。 ページは削除されたか、移動された可能性があります。 」 のページになってしまいます・・・ なにを記述すればindex.phpなしでアクセスできるようになるのでしょうか? Sabel ドキュメントとか(非公式) http://ebine.org/sabel/doc/index.html

    • 締切済み
    • PHP
  • mod_rewriteを適用して

    mod_rewriteを適用したところ、リンク先HTMLがおかしくなりました。 http://xxx.jp/rewrite.php?p=1 ↓ http://xxx.jp/rewrite/1 とするようにルールを以下のように設定しました。 RewriteRule ^/rewrite/([0-9A-Za-z)]+) /rewrite.php?q=$1 すると、ドキュメントルート直下の他のファイル(hoge.php)へのリンク先HTMLが http://xxx.jp/rewrite/hoge.php となってしまいます。 なぜこうなってしまうのでしょうか?

  • デジカメの写真がブログにUPできません(泣)

    デジカメの写真をブログにのせようと思ったら 「アップロードに失敗しました。拡張子が対応していません。 *アップロードできるファイルは、250KBまでの拡張子jpg,gif,png,mid,swf,ico,mp3,html,txt,css,js,rdfです。 *banner.jpg,banner.png,banner.gifいずれかのファイル名でアップロードした場合外部URLから呼び出せます。」 と出るのですが全く意味がわかりません!!!!! どうすればいいのでしょうか? 超初心者のわたくしをお助け下さい(涙)

  • jpg,gif,png,mid,swf,ico,mp3,html,txt,css,js,rdfでペイント出来るソフトは有りますか?

    jpg,gif,png,mid,swf,ico,mp3,html,txt,css,js,rdfでペイント出来るソフトは有りますか?

  • PHP正規表現の難題・preg_replaceでイメージタグをリンクタグに…

    PHPのpreg_replaceを使用して、 imgタグをaタグに置換するプログラムで躓いています。 全てのパターン$hogeで適用される正規表現をかけません。 (※現在パターン1のみ出来ない状況で困っています) 間違い箇所ありましたらご教授下さい。 ■パターン1 $hoge = '<img src="http://test.jp/test.gif" class="test" style="border:none;" />'; ■パターン2 $hoge = '<img src="http://test.jp/test.gif">'; ■パターン3 $hoge = '<img width="100" src="http://test.jp/test.gif">'; preg_replace('/\<img(.*)src=\"?(http[\-_\.\!\~\*\'\(\)a-z0-9\;\/\?\:@&=\+\$\,\%\#]+(jpg|jpeg|gif|png|bmp))\"(.*)\>/i',"<a href='\\2'>link</a>",$hoge); どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • zendframeworkインストールエラー

    初めての質問失礼します PHPでシステム開発をしているのですが、Zend framework をインストール(コピー)して サンプルを作成してテストしてみたのですが以下のエラーが出てなかなか解決できません どなたかわかる方お願いいたします。 Apacheのエラーログ PHP Fatal error: require_once(): Failed opening required './Zend/Version.php' (include_path='.;c:/php/includes;C:/apache/htdocs/ZF2/library/') in C:\\apache\\htdocs\\rewrite_test\\index.php on line 3 自分なりに調べまして php.iniのinclude_pathのエラーでZend framework(以下ZFと書きます) ZFのライブラリが見つかっていないのだなということはわかるのですが 環境はWinXPSP2 Apache2.2.22 PHP 5.3.18です。 ApacheはC:/apacheにインストール もちろんDocumentRootはC:/apache/htdocs/です。 mod_rewriteも有効にしてあります。 php.ini のinclude_pathの設定 798 ; Windows: "\path1;\path2" 799 include_path = ".;c:/php/includes;C:/apache/htdocs/ZF2/library/" C:/PHP5にインストール 作ったサンプルのディレクトリ構成 C:\apache\htdocs\rewrite_test以下 にtest.html と index.phpをおき、 indexphpの内容 ・・・・・・・・・ <?php // Zend_Version クラスをrequireする。 require_once './Zend/Version.php'; // Zend Frameworkのバージョン情報をechoする echo 'hello, Zend Framework ! version = ' . Zend_Version::VERSION; ?> ・・・・・・・・・・・ .htaccessの内容 ・・・・・・・・・・・・ RewriteEngine on RewriteBase /rewrite_test RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php ・・・・・・・・・・・・ ZFのバージョン2.0.5 ApacheのDocumentRootにそのままコピーして ZF2とファイル名変更 でhttp://localhost/rewrite_test/test.htmlでアクセスすると http500えらーがでて上記のエラーがでてしまいます。 どこか間違えありましたらお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mod_rewrite / RewriteRule について教えて下さい

    私はプログラムが専門なのでmod_rewrite等サーバー関連に疎く、かなり調べましたがこれといった情報が見つからず質問させて頂きます。 まず、.htaccessにて RewriteRule ^(.*)/$ $1.php と記載しており、 http://www.foo.com/bar/ → http://www.foo.com/bar.php に置き換えております。 この部分については思った通りに置換されておます。 しかし http://oshiete1.goo.ne.jp/qa2509320.html こちらにも書かれてますように、HTML内の画像ファイルへの参照が相対パスで書かれておりますので、RewriteRuleを上記設定にすることでディレクトリ階層がズレてしまいます。 http://oshiete1.goo.ne.jp/qa2509320.html には「画像のパスも mod_rewrite で書き換えるというのが一番スマートのような気がします。」とありますが、その具体的な方法がこのQAには記載されておらず、どうやって書いたら良いか分からないでおります。 知りたいのはパスを置き換える.htaccessへの具体的な記述方法です。 今回、画像・CSS・JavaScriptが全て外部ファイルになっており、HTML側では全て相対参照で指定されております。 SVNによる複数人開発のため絶対パスの指定が出来ませんので、相対指定で何とかならないものかと試行錯誤しております。 OSはCentOS4.3です apacheはyumでインストールしたものでhttpd-2.0.52-28となっております。 宜しく御願いいたします。

  • FC2ブログに画像が貼れない

    ハジメマシテ FC2ブログでブログの記事に画像を貼ろうとし マイピクチャから参照して記事にアップロードしようとすると アップロードに失敗しました。拡張子が対応していません。 * アップロードできるファイルは、500KBまでの拡張子jpg,gif,png,mid,swf,ico,mp3,html,txt,css,js,rdfです。 * banner.jpg,banner.png,banner.gifいずれかのファイル名でアップロードした場合外部URLから呼び出せます。 って出るんですけど解決策がわからないです・・ ちなみに画像は大きくなく、250KBくらいなんですが・・ 載せれる様になる方法を教えてくれませんか?

  • CodeIgniterのURLの簡素化

    CodeIgniterでの開発を考えているのですが、URLを簡単にするための.htaccessが有効にならずに困っています。 RewriteEngine on RewriteCond $1 !^(index\.php|css|user_guide|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$) RewriteRule ^(.*)$ /CodeIgniter/index.php/$1 [L] をどこにおけばいいのか分かりません。どの階層でしょうか?

    • ベストアンサー
    • PHP
  • 拡張子変換ソフト

    ファイルの拡張子を変換したいのですが vectorとかで探してもなかなかいいのを見つけられません (僕の探し方が下手なんでしょうけど) おすすめの変換ソフトがあったら教えてください [変換したい拡張子] jpg,png,bmp,gif mp3,wav,wma mpg,mp4,wmv,flv