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

このQ&Aのポイント
  • 質問文章では、.htaccessファイルを使用してMIMEタイプを変更しようとしていますが、うまくいっていないようです。
  • ブラウザで指定したURLにアクセスした際に、MIMEタイプが変更されず、元のままであることを確認しています。
  • Apacheの設定やRewriteRuleの使用方法に問題があるのか、または別の原因があるのか、ご教示いただけないでしょうか。
回答を見る
  • ベストアンサー

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
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> DirectoryIndexが適用されたときのみ、つまり これも影響するとは、、、 若干手間ですが、一度Ridirectして、アクセスし直してもらうのはいかがでしょうか。 RewriteRule ^(.*)/$ $1/index.html [R=permanent,L] > 下のように " で囲むといけるようです。 > RewriteRule .* - "[T=text/html;charset=Shift_JIS]" なんと、これで良かったのか。。。m(_ _)m

nerumako
質問者

お礼

一度Ridirectする方法でやってみたいと思います。 ちなみにDirectoryIndexでアクセスした場合、 RewriteRule ^(.*)/$ $1/index.html [R=permanent,L] ではRidirectできないようで、 RewriteRule ^$ /index.html [R=permanent,L] これだとうまく行きました。 RewriteEngineってhtaccessの中に書けるは書けますが ちょっと勝手が違いますね><; この度は色々教えていただき本当にありがとうございました。

その他の回答 (1)

回答No.1

RewriteRule .* - [T=text/html] charsetを外した状態ではMIME-Typeが変更されてますか? ( ̄-  ̄ )。oO ([ ]の中に=を入れる時ってどうすればいいのかな。。。)

参考URL:
http://okwave.jp/qa2765001.html
nerumako
質問者

補足

ご回答ありがとうございます! URLの書き換えをしてしまうと[T]フラグが無効になってしまうというのは大変勉強になりました。 まさに参考URLの内容の通りでございます。 RewriteRule .* - [T=text/html] ご指摘通り、上記のようにcharsetを外してみましたが駄目でした。 ですが、ひとつ解った事がございます。 DirectoryIndexが適用されたときのみ、つまり http://hogehoge.com/ にアクセスしてindex.htmlが呼び出された時のみ[T]フラグが無視されていて、他のhtmlでは[T]フラグが有効のようでした。 http://hogehoge.com/index.html とアクセスした場合でも[T]フラグが有効でした。 DirectoryIndexもURLの書き換え扱いなのかもしれません。 DirectoryIndex適用時でも[T]フラグが有効になる手立てをご存知でしたらご教示いただけますでしょうか。 > ( ̄-  ̄ )。oO ([ ]の中に=を入れる時ってどうすればいいのかな。。。) RewriteRule .* - [T=text/html;charset=Shift_JIS] 下のように " で囲むといけるようです。 RewriteRule .* - "[T=text/html;charset=Shift_JIS]"

関連するQ&A

  • 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
  • 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を経由する方法を採ることにします。

  • 競合するRewriteRuleの対策について

    以下のようなルールを実現したいと考えています。 http://hogehoge.com/ → http://hogehoge.com/ http://hogehoge.com/index.php → http://hogehoge.com/index.php http://hogehoge.com/<半角英語> → http://hogehoge.com/test.php?word=<半角英語> 3行目について以下の記載で実現できたのですが、この状態で、 上記の2行目のRewriteが行われないようにしたいのです。 RewriteEngine on RewriteRule (.*)$ test.php?word=$1 恐れ入りますが、ご指導お願いいたします。

    • ベストアンサー
    • HTML
  • htaccessのRewriteRuleの正規表現

    htaccessファイルのRewriteRuleの記載方法で悩んでいます。 実現したい事は以下の2つの動作ですが、(1)は出来たのですが、(2)で困っています。 なお、{user_name}は"?"を除く半角英数文字と-_で構成されています。 (1)Twitterのようにドメイン名以後にユーザ名がある場合はindex.phpにGETのuserでuser_nameを渡す http://hogehoge.com/{user_name}  ↓ http://hogehoge.com/index.php?user={user_name} (2)ユーザ名表示の際にオプションがある場合("?"以後)は、そのまま変換先URLの最後尾に記述する http://hogehoge.com/{user_name}?option1=ok  ↓ http://hogehoge.com/index.php?user={user_name}&optione1=ok 現状以下のようにhtaccessを考えましたが結果NGでした。 RewriteEngine on RewriteRule (.+)[?](.+)$ index.php?mode=user&screen_name=$1&$2 [L] RewriteRule (.+)$ index.php?mode=user&screen_name=$1 [L] よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • RewriteRule の使い方がわかりません(>_<)

    ~.com/abc/ の (1) RewriteEngine On RewriteRule ^(a).html?$ $1.cgi [L,T=application/x-httpd-cgi] としたところ /。。。/a.cgi (内部でのパス) ・Not Foundとか、 ・You don't have permission toだとか  エラーがでるのですが (2) RewriteRule ^(b).html?$ /abc/a.cgi とかだと きちんと表示されます (1) をきちんと 設定したいのですが どうやって設定するのですか? もしかして  書き換えたアドレスは ドメインからの urlとして 記述しないといけないのですか?

  • .htaccessのRewriteRuleエラー

    PHPのフレームワークを使って、サイトを作成しているのですが、 .htaccessの設定でつまずいております。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php 上記のコードはフレームワークを使う時の お決まりのようなコードなのだと思うのですが、 これはコピペして問題無く動作しております。 ※このコードは下記ページのものをコピペしました。 http://www.yiiframework.com/doc/guide/1.1/ja/topics.url#sec-7 しかし、この既存の.htaccessファイルに下記の通り、 www無しのアクセスをwww有りのurlに転送させるための コードを追加すると、サイト内のリンクが切れてしまいます。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{HTTP_HOST} ^mydomain.com //これを追加した RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L] //これを追加した RewriteRule . index.php 記述方法が誤っているのだと思うのですが、どのように記述すれば、 正常に動くのでしょうか?

    • ベストアンサー
    • PHP
  • RewriteRule 可変

    いつもお世話になっております。 ここ数日.htaccessの対応を始めました。 Webで調べつつやっているのですが、 変換後のURLがどうしてもうまくいきません。 ご教授願えたらありがたいです。 [変更前] http://sample.com/type/0001.html [変更後] http://sample.com/COLOR/RED/0001/index.html COLORとREDは可変 自分が記述したのが、 RewriteRule ^([A-Z0-9\_\-\!\.]+?)\.html$ /[A-Z0-9\_\-\!\.]+/[A-Z0-9\_\-\!\.]/index\.html [R=301,L] としたのですが、当然[A-Z0-9\_\-\!\.]+の箇所は変なアドレスになってしまいます。 変換後のアドレスが可変の場合はどのようにしたらいいのでしょうか。 よろしくおねがいします。

  • .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タイプの設定を上書き

    お世話になっております。 今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
  • CSVのMIMEタイプ

    PHPを使用してCSVの入力チェックを行おうとしています。 エクセルファイルの内容をcsv形式で保存していますが、EXCEL2003で保存したcsvはtext/plainとしてMIMEタイプが認識されますが、EXCEL2007で保存するとMIMEタイプがapplication/octet-streamとして認識されてしまいます。 1.エクセルファイルをエクスプローラー等から名前の変更で拡張子ごと無理矢理csvに変更することが想定されています。 その場合は当然入力チェックではじきたいのですがMIMEタイプでtext/plain text/csv以外はじくということが出来なくて困っています。 何かPHP側でCSVかどうかを確認する方法はありますでしょうか? (エクセルファイル以外にもテキスト形式ではない場合はエラーとしたいです。) 1行取り出して、指定カラム分あるかのチェックは別にしていますが、上述の通り、EXCELを無理に直したのか、純粋に中のデータの列定義がおかしいのかは分けてエラーを表示したいと考えています。 2.1が難しいという場合エクセル側でMIMETYPEを変更することはできないでしょうか? 現在は名前を付けて保存で、拡張子をcsvを選択して保存しています。 (2007以降でバージョンは様々あります。)

    • 締切済み
    • PHP

専門家に質問してみよう