Apache:あらかじめパックされたgzip形式のファイルを送信します


8

Apacheにgzip圧縮された静的ファイルをネットワーク経由で送信させたいですが、Apacheが常にそれらを繰り返しgzip圧縮しないようにして欲しいです。したがって、.gzファイルが存在する場合、それを配信することは不可能かと考えました。このセットアップ:

ファイル構造:

static/
|
|--- style.css
|
\--- style.css.gz

そして、次の.htaccessに:

mod_rewriteルール:

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]

そしてこの設定:

AddEncoding x-gzip .gz

実際、リクエストがに送信された場合、.cssの代わりに.gzファイルが送信される限り、これは機能し/static/style.cssます。問題は、ファイルが「text / css」ではなく「application / x-gzip」として配信されることだけです。mod_rewriteのTフラグを使用しても、これは変わりません。明示的でもありません

AddType text/css .css

誰かがアイデアを持っていますか?または、何らかの理由で私が考慮しなかった必要がないのですか?

編集:追加の問題があります:gzipサポートなしで元のファイルをクライアントに送信します。これがどのように機能するか考えている人はいますか?


これを行わないWebサーバーがあるのはおかしいようで、これはそれほど明白ではないことに驚いています。IISには、最初のアクセス時に静的ファイルのgzipされたコピーをキャッシュするシステムがあると思います。mod_deflateはそのような機能について言及していません。
rjmunro 2009

apacheのmod_deflateドキュメントに独自の例が追加されました
cweiske

回答:


5

gzipを受け入れないブラウザに正しいバージョンを送信するための解決策は、次のようなものです。

RewriteCond %{HTTP:Accept-Encoding} !gzip
...your rules here...

また、タイプを変更する別の方法もあります。

<FilesMatch .*\.css.gz>
    ForceType text/css
</FilesMatch>

<FilesMatch .*\.js.gz>
    ForceType text/javascript
</FilesMatch>

HTH。


よろしくお願いします。%{HTTP:...}に関するドキュメントはありますか?Apache 2.2のRewriteCondセクションにそれについての言及はありませんでした。FilesMatchは私が持っている別のアイデアですが、もっと冗長だと思いました。どちらのルールも正規表現エンジンを起動する必要があるため、実際に違いはありません。
Boldewyn、2009年

わかりました、ドキュメントを見つけました。httpd.apache.org/docs/2.2/mod/mod_rewrite.html興味深い部分はスキップしました。
Boldewyn、2009年

これは大きな問題ではありませんが、その設定を読み取ると、誰かが.css.gzファイルを手動でフェッチした場合、application / x-gzipタイプを取得する必要があるときに、text / cssを取得します。
rjmunro 2009

なぜ !Accept-Encoding行のgzipの前に?確かにそれはあなたが必要とするものの反対です?
rjmunro 2009

私は同じことを考えていました。RewriteCondクライアント gzipエンコーディングを受け入れる場合にのみ一致するようにするのは理にかなっています。
David Z

3

ああ、私は解決策を見つけたようです:同じルールに設定されている場合、Tフラグは機能しませんが、独自のルールを使用すると、確実に機能します。

RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz

RewriteRule \.css\.gz$ - [T=text/css]
RewriteRule \.js\.gz$ - [T=text/javascript]

それでも他の人の解決策や意見を聞きたいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.