我想为某些页面禁用GZip。我在我的.htaccess
中有此内容,但在访问Content-Encoding: gzip
时仍会启用GZip(dashboard/index
)。
<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
我尝试添加Header set MyHeader %{REQUEST_URI}
以查看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 :(得分:1)
您可能正在使用重写来删除网址中的index.php
。由于SetEnvIf
在请求期间运行的阶段,index.php
将成为所使用的Request_URI
var的一部分(与%{REQUEST_URI}
不同)。
现在很常见的是不使用PATH_INFO
进行重写,但只是简单地重写为index.php
,其中代码只读取原始的REQUEST_URI
信息。在这种情况下,Request_URI
中的SetEnvIf
将只是&#34; index.php&#34;,因此您需要在该网址的特殊虚拟重写中设置标志env var ,稍后用REDIRECT_
前缀引用它(因为重写时有一个内部重定向阶段,其中mod_rewrite为REDIRECT_
所有现有的env变量添加前缀):
RewriteRule ^dashboard/index - [E=no-gzip:1]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
SetEnvIf REDIRECT_no-gzip 1 no-gzip
如果您重写为PATH_INFO
,则会略显冗长(所以&#34; /foobar
&#34;转向&#34; /index.php/foobar
&#34;使用例如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
机制,它就会中断。