2016-03-24 15 views
0

特定のページでGZipを無効にしたいとします。私は.htaccessにこれを持っていますが、dashboard/indexに行くと、GZipは(Content-Encoding: gzip)に変わります。Apache .htaccessでSetEnvIfNoCaseを使用してGZipを無効にするにはどうすればよいですか?

<ifmodule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript 
    BrowserMatch ^Mozilla/4 gzip-only-text/html 
    BrowserMatch ^Mozilla/4\.0[678] no-gzip 
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
    SetEnvIfNoCase Request_URI /dashboard/index no-gzip dont-vary 

私はRequest_URIが何であったか確認するためにHeader set MyHeader %{REQUEST_URI}を追加しようとしましたが、それは内部サーバーエラーを与えました。

また、正規表現dashboard/index,dashboard/index.*"/dashboard/index"などを試してみましたが、SetEnvIfNoCase REQUEST_URI ...を試しましたが、GZipはまだオンになっていました。

私が#AddOutputFilterByTypeにコメントすると、GZipはオフになります。

私はApache 2.4.16、Yii 2.0.7、PHPを使用しています。 FPMをプロダクションで使用しているので、apache_setenv()は利用できません。

+0

ヘッダ 'myHeaderName:/ project/web/dashboard/index'を生成する' Header set myHeaderName "%{REQUEST_URI} e" 'を使用してリクエストURIでヘッダを出力することができました。 GZipはまだ動作しています。 – Chloe

答えて

1

URLにindex.phpを取り除くために、おそらく書き換えを使用しています。要求中にSetEnvIfが実行される段階のため、index.phpRequest_URI(使用された)の一部になります(これは%{REQUEST_URI}とは異なります)。

書き換えにはPATH_INFOを使用しないでくださいが、コードはちょうど元のREQUEST_URI情報を読み取るindex.phpに簡単に書き換えてください。その場合、Request_URISetEnvIfは単に "index.php"になるので、特別なダミー書き換えでそのURLのフラグenv varを設定し、後でREDIRECT_というプレフィックスで参照する必要があります(内部にすべての既存のENV)はREDIRECT_とmod_rewriteのプレフィックスをvarsの場所書き換えステージをリダイレクト:あなたはPATH_INFOに書き換える場合

RewriteRule ^dashboard/index - [E=no-gzip:1] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.php [L] 
SetEnvIf REDIRECT_no-gzip 1 no-gzip 

がわずかに少ない冗長な方法がある(いわゆる「/foobar」)は、「/index.php/foobar」などRewriteRule (.*) index.php/$1ルール使用することになります:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule (.*) index.php/$1 [L] 
SetEnvIfNoCase REQUEST_URI ^/index.php/dashboard/index.*$ no-gzip dont-vary 

しかし、あなたがRewriteRuleのメカニックを変えれば、それは壊れるので、それはもっと脆いようです。

関連する問題