0

Deflate Compression、Apache (htaccess)、および CSS ファイルに関連する非常に興味深い問題があります。

サーバーに 2 つの CSS ファイルがあります。1 つは styles.php と呼ばれ、データベースの値に基づいて、styles/ ディレクトリの mod_rewrite によって動的な値が追加されます (styles.php から site.css に書き換えられ、ファイルの先頭に text/css ヘッダーがあります)。また、styles.css と呼ばれる同じディレクトリに、変更されない静的コンテンツを含む通常の古い css ファイルもあります。

サイトに圧縮を追加したかったので、次の行を追加して、css ファイルと js ファイルの圧縮を開始しました。これを自分の Web サイトの root_directory に追加しました。

<ifModule mod_deflate.c>
    <filesMatch "\.(js|css)$">
        SetOutputFilter DEFLATE
    </filesMatch>
</ifModule>

まあ、最初はうまくいきませんでした。そこで、ルート htaccess ファイルのこの行を、これから次のものに変更しました。(以下のコードはファイルの先頭にあります)

AddType application/x-httpd-php5 .html .php
AddType application/x-httpd-php5 .html .php .js .css

次に、私の js ファイルと css ファイルの 1 つが圧縮され始めました (YSlow で検証済みです.....やった!)。奇妙なことに、書き換えられていた css ファイル (styles.php ファイル) は圧縮されていましたが、styles.css ファイル (静的ファイル) はブラウザーによって読み取られなくなりました。その AddType 行から「.css」を削除するとすぐに、ブラウザはファイルの読み取りを再開し、css は正常に戻りましたが、Apache で圧縮されなくなりました。

タイプを追加すると、静的 css ファイルがブラウザーによって読み取られない理由について何か考えはありますか? .css の代わりに text/css だけで試してみましたが、ファイルは圧縮されませんでした (ただし、ブラウザーはそれを解釈しました)。

アップデート:

これをルートのhtaccessファイルに追加しました。私たちは今、甘さを圧縮し、解釈しました。

<filesMatch "\.css$">
FileETag None
<ifModule mod_headers.c>
Header set Content-type "text/css"
</ifModule>
</filesMatch>
4

1 に答える 1

2

PHP プリプロセッサを介して CSS ファイルを実行すると、text/html手動で指定していないため、PHP はデフォルトのヘッダーを介してファイルとして自動的に出力します。つまり、ブラウザは.css、HTML ファイルであると主張するヘッダーを持つ拡張子を持つファイルを受信して​​いるため、CSS ではなく HTML として解釈しようとしています。

CSS ファイルを実際に PHP として実行する必要があり、その中に PHP が含まれている場合は、適切なファイル タイプを再発行する必要があるため、出力時に CSS のままになります。

<?php
header('Content-type: text/css');
?>

PHP を介して CSS ファイルを送信するだけで、まったく同じように動作することを期待することはできません。実際に PHP で前処理していない場合は、そこから送信するべきではありません。


デフレの問題に関しては、実際に mod_deflate を個人的に機能させることはできませんでした (理由はわかりません)。代わりに mod_gzip を使用する必要がありました。

于 2012-04-09T21:32:20.033 に答える