web-dev-qa-db-ja.com

Apache:事前にパックされたgzipされたファイルを送信します

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

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

AddType text/css .css

誰かがアイデアを持っていますか、どうすれば望ましい行動を達成できますか?それとも、私が考えていなかった何らかの理由で不要ですか?

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

8
Boldewyn

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

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

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

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

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

HTH。

5
Sam Halicke

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

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

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

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

3
Boldewyn