web-dev-qa-db-ja.com

header( "Content-type:text / css"); FirefoxとChromeで動作していますが、Internet Explorer 9では「text / html」として表示されます

header("Content-type: text/css");はFirefoxで動作します、Chromeおよびその他、ただしInternet Explorer 9では動作しません。何が起きているのかわかりません。

ChromeおよびFireworkでは、独自のタブで開いてページに適用されている場合、スタイルシートが表示されます。

Chrome開発者ツールの[ネットワーク]の下で、タイプはtext/cssおよびステータスは200です。

Internet Explorer 9では、スタイルシートを独自のタブで開き、ページに適用されていない場合、スタイルシートをダウンロードする必要があります。

F12開発者ツールでは、ネットワークをクリックしてキャプチャを開始し、ページを更新できます。 Style.css.php。タイプはtext/htmlおよび結果は406です。

これは頭​​の中にあります:

<link rel="stylesheet" type="text/css" href="/assets/css/style.css.php" media="screen" />

リクエストヘッダー:

Key Value
Request GET /assets/css/main.css HTTP/1.1
Accept  text/css
Referer http://10.0.1.5/
Accept-Language en-US
User-Agent  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding gzip, deflate
Host    10.0.1.5
Connection  Keep-Alive
Cookie  PHPSESSID=*Hidden*

応答ヘッダー:

Key Value
Response    HTTP/1.1 406 Not Acceptable
Date    Fri, 01 Apr 2011 10:12:42 GMT
Server  Apache/2.2.14 (Ubuntu)
Alternates  {"main.css.php" 1 {type application/x-httpd-php}}
Vary    negotiate
TCN list
Keep-Alive  timeout=15, max=100
Connection  Keep-Alive
Content-Type    text/html; charset=iso-8859-1
31
Keverw

IEには " いいえ、Content-Typeについて冗談を言うつもりはありません "スイッチがあります:

X-Content-Type-Options: nosniff

ところで:PHPでLast-Modifiedを送信し、session.cache_limiterを無効にすることも確認してください。そうしないと、ブラウザーはCSSファイルをリロードし続け、パフォーマンスに悪影響を及ぼします。

41
Kornel

Internet Explorerには、ブラウザによって報告されたMIMEタイプよりもファイル拡張子を信頼するという歴史があります。 mod_rewriteを使用できる場合は、HTMLで.cssファイルを探してから、そのURLをスクリプトにパイプするmod_rewriteルールを作成します。

16
Nathan Strong

header("Content-type: text/css", true);を使用するとうまくいくことがわかりました。サーバーが「Content-Type」の2つのHTTPヘッダーを出力するのを防ぎます。

11
samshull

ヘッダーが送信される前に出力はありますか? phpファイルのBOM?キャリッジリターン?

エラー報告を無効にした場合、トリガーされるエラーが表示されない場合があります。

ob_start()を先頭に追加してみてください。header()呼び出しの前に既に送信されたヘッダーに関連する問題を解決します。

UTF8ファイルにBOMがある場合は、削除することをお勧めします。

4
Capsule

最近、私自身にもこのような問題がありました。厄介なデバッグだけがこれについて言えます。これがあなたの人々に役立つかどうかはわかりませんが、そうなることを願っています。話の本題に入る。

Internet Explorerは、MIMEタイプのスニッフィングと呼ばれるものを使用します。これは、ファイルヘッダーの200バイトを読み取るだけです。

PHPスクリプトがありました。このスクリプトは、提供されたパラメーターに応じて、異なるデータファイル(データ-ファイル全体)を返す必要がありました。

私のビデオリクエストの例:get-video.php?id = here_goes_the_id

$file = ''; // Get the video file path
if (is_file($file)) {
    header("Content-Type: video/mp4");
    header("Content-Length: " . filesize($file));
    readfile($file);
}
exit(); // This is the turnaround

ファイルデータを送信した直後にスクリプトを一時停止する必要があります。これにより、IE Mime-type sniffing。

それが役に立てば幸い。

0
Lukas

動的に生成されたCSSファイルの応答ヘッダーでHTTP 406ステータスコードを提供するInternet Explorer 9の場合:

  1. Apache mod_negiotiationモジュールを削除するか、ホスト構成(または.htaccess)に-Multiviewsを追加しました。
  2. アクティブ化されたApache mod_rewrite
  3. 仮想ホスト構成またはhtaccessに書き換えルールを追加しました。

    <IfModule mod_rewrite.c
    
      RewriteEngine on
      RewriteBase /
    
      #serve CSS and JS from combine.php
      RewriteRule ^combine(.*) combine.php [NC,L]
    
    </IfModule>
    

注:このソリューションは、mod_negotiationを削除するとこのディレクティブの使用も削除されるため、Multiviewsを使用していないサーバー/仮想ホストにのみ適しています。

0
Paktas

この問題は、おそらくCSSではなく401エラーページ(HTML)を提供しているmod_securityが原因であると思います。これをWebサイトのWebルートの.htaccessファイルに追加して、問題が解決するかどうかを確認してください。

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>
0
Marcel

記事Handle Images/CSS/JS as PHP without httpd.conf Using .htaccess問題の把握に役立ちました。

基本的には、他の全員が言及したのと同じこと(PHPでヘッダーを設定するなど)を行いますが、.htaccess AddHandlerパラメータを設定します。

<Files my_style.css>
    ForceType application/x-httpd-php
    AddHandler application/x-httpd-php .css
</Files>

このように、.cssで名前を付け、まだPHP解析することができます。

0
Mike