• 締切済み

RewriteRule force MIME typeの仕様と使用

RewriteRuleでMIME typeを変更する方法ですが、 RewriteRule ^(.+\.hoge)$ $1 [T=image/jpeg] と書いてみましたが、デフォルトのtext/plainになっているようです。 [T]フラグを使うのは.htaccess以外の何か設定が必要なのでしょうか。 テストサーバーはLinux Apache2.0.54です。 公開の(実際に使用する)時のサーバーはホスティングサービスで、Linux、Apache2.0.52です。 こちらで設定出来なければサーバーの負荷が高くなりますが、CGIを経由する方法を採ることにします。

  • HTML
  • 回答数1
  • ありがとう数3

みんなの回答

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

書き換えしないのであれば AddType image/jpeg .hoge ではだめでしょうか

taloo
質問者

お礼

他のBBSやメーリングリストでも質問してみたのですが、結局回答を得られず、自己解決です。 URLの書き換えをしなければMIME typeを変更出来ました。 RewriteRule ^(.+\.hoge)$ - [T=image/jpeg] http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide_advanced.html これを利用して、 HTML <img src="image.jpg"> <a href="image.jpg?download">ダウンロード</a> .htaccess RewriteEngine on RewriteCond %{QUERY_STRING} ^download RewriteRule ^(.+)$ - [T=application/octet-stream] CGIを使わずに同じファイル(ファイル名)で保存ダイアログを出せるようになりました。 他にも使い道はありますが、ご参考まで。

taloo
質問者

補足

回答ありがとうございます。 アクセスしたときに条件付きで動的にMIME typeを変更したいと思っています。 (この拡張子やMIME typeは一例です) はじめは xxx.hogeでアクセスするとtext/plain xxx.hoge?jpgとしてアクセスするとimage/jpgにしたかったのでこういう例になりましたが、 試行錯誤するうちにアクセス時の拡張子を変えてみようと、 <FilesMatch "\.(hoge)$"> ForceType image/jpeg RewriteEngine On RewriteRule (.+)\.hoge$ $1\.gif [T=image/jpeg](または[T=image/jpeg,PT]) </FilesMatch> というのもやってみましたが、[T]フラグは無視されているようですし、 ForceTypeも実行されませんでした。 <FilesMatch "\.(html)$"> ForceType image/jpeg </FilesMatch> ちなみにこれはimage/jpegで出力されます。 代替策ですが、 リダイレクトではなく、ファイルの中身を出力するというのはどうすればいいのでしょうか? ([T]フラグを使う方法があればそれも、、、)

関連するQ&A

  • RewriteRuleでMIMEタイプ変更できない

    .htaccessに下記を記述しました。(記述は質問用に簡略化してあります) #-- ここから -------------------------------- DirectoryIndex index.html AddType application/xhtml+xml .html RewriteEngine on RewriteRule .* - "[T=text/html;charset=Shift_JIS]" #-- ここまで -------------------------------- http://hogehoge.com/ とブラウザでアクセスした場合index.htmlが呼び出されますので MIMEタイプはtext/htmlに変更されて渡されるはずなのですが、変更はされていないようなのです。 IE6(インターネットエクスプローラー6)で確認すると「ダウンロード」の確認ダイアログが出てしまいますのでMIMEタイプは元のxhtmlのままになっているのだと思います。 RewriteRule .* http://www.hogehoge.com [R=301,L] とかはちゃんと機能しますのでMIMEタイプ変更の(T=)が機能していないのでしょうか? その場合はApacheの設定か何かあるのでしょうか? ご回答を宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • MIMEタイプの設定を上書き

    お世話になっております。 今cgi-binの中でしかcgiが動かないサーバーを借りていてcgi-binの中からcssや画像を呼び出そうと考えております。サーバではcgi-bin以下はすべてcigスクリプトとして解釈するためそのままではいけません。 そのためいろいろやってみてすべてのファイルをcgiスクリプトとしてでなく画像ファイルなら画像、JSファイルならJSと認識させることに成功したのですが、 cssだけがなぜかうまくいきません。 以下そのために行ったことと調査結果です。 .htaccessが使えるので.htaccessに AddType image/jpeg .jpeg .jpg .jpe AddType image/png. png AddType text/html .html .htm AddType text/css .css (略...) AddHandler image/jpeg jpeg jpg jpe AddHandler image/png png AddHandler text/html html htm AddHandler text/css css (略...) と書いてみたのですが、cssがiE以外に効きませんでした。画像に関してはimgタグで指定した画像はどのブラウザでも正しく表示できています。 ブラウザに直接アドレスを叩くと全部正常にDLできました。 cgi実行ファイル .htaccess  |  ┣━━commoms  |画像ファイル  |画像ファイル  |hoge.css  |(以下略) このような構成になっていてcgiが出力するhtmlで読もうとしているのはhoge.cssです。 炎狐のFirebugで調べたところ 「MIME タイプが "text/css" ではなく "application/x-httpd-cgi" となっているため、スタイルシート"xxx.css"は読み込まれていません」 とエラーが出ました。 いろいろググったのですが、結局ここまでしかわかりませんでした。 AddTypeでMIME タイプは上書きていると書いてあるところがあったのですが、ほんとでしょうか? どなたか、サーバーの初期設定値"application/x-httpd-cg"から"text/css"に変える方法を教えてください。どうかよろしくお願いします。

    • ベストアンサー
    • CGI
  • RewriteRule有効について(Apache設定)

    Apache2をWindows2kにインストールし運用しています。 RewriteRuleを行うが有効になりません。 httpd.confと.htaccessは、以下のように記述しています。 .htaccessは、レンタルサーバーに転送しテストすると正常に動作します。 と言うことは、ローカルサーバーの環境設定がまずいと言うことになるかと思うのですがどうしても分かりません。 ご教授の程、宜しくお願いします。 -----(httpd.conf)----- Options All AllowOverride All LoadModule rewrite_module modules/mod_rewrite.so -----(httpd.conf)----- -----(.htaccess)----- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^info.html+ info.php RewriteRule ^k/index.html$ k/index.php RewriteRule ^k/([0-9A-Za-z]+)/$ k/index.php?id=$1 -----(.htaccess)-----

  • ApacheのRewriteRule

    現在、ApacheのRewriteRuleにてちょっと困っています。 例 RewriteRule ^hoge/(.*)/(.*)/ /hoge.php?$1=$2 [L] という感じで、記述しています。(実際はもっとちゃんと書いていますが) これは、URLの静的化としての対応です。 想定としては、第1引数にクエリのキー 第2引数に値といった感じで考えているのですが %2Fが入ってきたときにうまく動作しません。 %2Fは「/」ですね たとえば、こんなURLがあったとします。 /hoge/q/aaa%sFbbb/ というアクセスがあったとき、上記例にてマッチしないみたいです。 (たぶん内部的に、/hoge/q/aaa/bbb/ってアクセスになってるぽい?) このような場合の対処法ってないのでしょうか? 一応ですが、RewriteMapでエスケープ用のPG作って対処できそうなのですが、この手法だと現状のサーバーではできないので>< ほかに方法がないのかなぁと。。。 (RewriteMap escape int:escapeとかですね。)

  • mime_magicを有効にするには?

    Debian/GNU Linux 5.0 lennyに次のアプリを入れてWebサーバーを構築しました。 ・Apache2 ・PHP(Version 5.2.6-1+lenny3) ・MySQL5.0 これでphpinfo();を実行すると、「mime_magic」が「invalid magic file, disabled」となってしまいます。 これを「enabled」にするにはどうすれば良いのでしょうか? ちなみにDebian/GNU Linux 4.0 etchの場合は、 ・PHP Version 5.2.0-8+etch15 で「mime_magic」がデフォルトで有効になっています。 mime_magicが有効でないと一部ブラウザで文字エンコードが上手く動かないようなので、対処方法をご指南頂けないでしょうか。 よろしくお願い致します。

    • 締切済み
    • PHP
  • Apache2.0.54にてRewriteRule内に/が含まれるパスが認識されない

    お世話になります。 TOCMAT5.0.3/Apache2.0.54 の環境にて 特定ページへのアクセスが来た際にsslにてアクセスを行いたく 以下のような設定を行いました。 .htaccessにて --------- RewriteEngine on RewriteBase / RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^test/test.html$ https://%{SERVER_NAME}/secure.html [R,L] RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^test.html$ https://%{SERVER_NAME}/secure.html [R,L] --------- test.htmlでアクセスすると正常にリダイレクトが行われるのですが RewriteRule内に「/」が含まれているものはうまく動作しません。。 以下のようなパスに変更などして試しているのですがうまくいきません。 ^test\/test.html$ ^test//test.html$ ^test/*$ 他のサーバーにて、同様のRewriteRuleは正常に動作しますので、 mod_jk.conf httpd.conf の設定に不備があるように考えていますが検討が付きません。 ご教授よろしくお願い致します。

  • .htaccessのRewriteRuleの記述

    .htaccessのRewriteRuleの記述方法について質問です。 以下のようなURL移転があったので、RewriteRuleを記述したいのですが、どのように記述すればよろしいでしょうか? 【旧URL】 http://example.com/hoge/hoge.php?id=数字 【新URL】 http://example.com/foo.php?var=1&id=数字 ※数字は対応しています(同じページは同じ数字が入ります)。 なお、私なりにググってみて、以下のように記述したのですが、動きませんでした。 Options +FollowSymLinks RewriteEngine on RewriteRule /hoge/hoge\.php\?(.+) http://example.com/foo.php?var=1&$1 [R=301,L] また、上記のような場合は、そもそもRewriteRuleは適切ではないということであれば、より良い手段をご教示いただきたくお願い申し上げます。

  • 自作サーバによるMIMEタイプの登録

    自作で簡単なソケットプログラム・HTTPサーバプログラムを書き、 HTTPによるストリーミング配信を試みています。 ストリーミング用の設定(HTMLとメタファイル)はいけたのですが、 サーバ側に拡張子・・MIMEタイプの設定(wmvのもの)が必要だということを知りました。 が、どこを検索してもapacheによるMIME設定の情報ばかりで、 自作のTCPプログラミングでどうすればいいかが分かりませんでした。 設定ファイルがないので作るのか?それともサーバで ファイルを読み込んだ際に、wmaはこういう動作を・・という風に指定すればいいのか? 試行錯誤したのですが分かりませんした・・ よろしければご意見おねがいします。

  • ApacheのRewriteRuleで、元のURLにアクセスさせない方法

    例えば、Apache の設定で、以下のように、hoge.html にアクセスすると、fuga.html を呼ぶようにします。 RewriteEngine on RewriteRule ^hoge\.html$ fuga.html もちろん、このままでは、直接 fuga.html にもアクセス可能ですが、直接、fuga.html にアクセスすることを拒否することは可能ですか?

    • 締切済み
    • PHP
  • AddTypeで指定したMIMEタイプが適用されない?

    次のような2つのファイルがhttp://example.example/にあるとします。 .htaccess (内容は下に表示) index.html (適当なxhtml文書) ---- .htaccess ---- AddType application/xhtml+xml html DirectoryIndex index.html ------------------- そこでhttp://example.example/にアクセスすると、 index.htmlへアクセスされるわけですが、 この時のMIMEタイプはtext/htmlになってしまいます。(サーバの元々の設定が適用される) http://example.example/にアクセスしてMIMEタイプapplication/xhtml+xmlで取得するにはどのようにすればいいのでしょうか。

    • ベストアンサー
    • HTML

専門家に質問してみよう