簡単な質問があります。ウェブディレクトリ/css
があり、中にはファイルstyle.css
があります。このファイルを手動でgzip圧縮し、style.css.gz
として保存しました。各リクエストでCSSファイルが圧縮されないようにCPUサイクルを節約したいのですが。 .gz
ファイルを何度も圧縮する代わりに、この.css
ファイルを検索して提供するようにApacheを設定するにはどうすればよいですか?
注:Apacheに.gz
ファイル自体を作成させたくありません。私のシナリオでは、.css.gz
ファイルを手動で作成する必要があります-特定のリクエストでPHPを使用します。
一部のRewriteRuleはこれを非常にうまく処理する必要があります。
Drupal構成ファイルで私が見つけた:
# AddEncoding allows you to have certain browsers uncompress information on the fly.
AddEncoding gzip .gz
#Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
これは仕事をします。どちらかを<Directory foo/>
セクションまたは.htaccessファイル。Apache設定にアクセスできない場合、またはWebサーバーの速度を低下させる場合。
Regileroの回答を続けて、サーバーが対応するContent-Encodingヘッダーで確実に応答するように、さらに数行追加する必要があります。
#Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=is_gzip:1]
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=is_gzip:1]
Header set Content-Encoding "gzip" env=is_gzip
mod_rewrite
を使用して コンテンツネゴシエーション を実装するのではなく、 q-values 、 status 406 、 [〜#〜] tcn [〜#〜] など)mod_negotiation
この質問 で説明されているように。そこから 私の答え をコピーしています:
Options +MultiViews
RemoveType .gz
AddEncoding gzip .gz
<FilesMatch ".+\.tar\.gz$">
RemoveEncoding .gz
# Note: Can use application/x-gzip for backwards-compatibility
AddType application/gzip .gz
</FilesMatch>
これには、.gz
と.css.gz
だけでなく、すべての.js.gz
ファイルで機能するという追加のボーナスがあり、追加のエンコーディング用に簡単に拡張できます。
存在しないファイルへのリクエストのみがネゴシエートされるため、これには1つの大きな欠点がありますファイル名前付きfoo.js
は、/foo.js
(/foo
ではなく)を要求して、圧縮されていないバージョンを返します。これは、 FrançoisMarierの非圧縮ファイルの名前を二重拡張子に変更するソリューション を使用して回避できるため、foo.js
はfoo.js.js
としてデプロイされます。この制限がデプロイメントプロセスにとってそれほど痛くない場合は、mod_negotiation
の使用を検討する価値があります。
これはあなたが尋ねたものではないことに気づきましたが、とにかくそれを捨てます。単にmod_cache
とmod_gzip
?適切な設定を行うと、Apacheはファイルをgzipして、圧縮されたキャッシュファイルをクライアントとダウンストリームプロキシに渡します。これは、時間と労力の点で提案したものよりもはるかに効率的であり、帯域幅と計算負荷の点でも同等に効率的です。
PHPが最初にファイルを圧縮したことは問題ではありません。適切な設定でmod_gzipがそれを検出するためです。主なポイントは、圧縮ファイルをキャッシュでき、Apacheがそれらを再圧縮しないことです。
このブログ投稿 探していたステップバイステップではないですか?
このgzipされたバージョンのファイルが存在することを確認し(4行目)、存在する場合は、要求されたファイル名に.gzを追加します