Então, consegui resolver meus problemas, levando em conta as suposições que descrevi em minha pergunta, que parecem corretas. Mas não sem luta.
Ao tentar implementá-lo apenas para conteúdo gerado pelo PHP, encontrei alguns outros problemas, que descreverei aqui:
Inicialmente tive as seguintes regras de reescrita no meu .htaccess
:
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Com RewriteRule
flags, você deve conseguir definir variáveis de ambiente . Então, imaginei que seria possível definir o E=no-gzip:1
flag apenas no último RewriteRule
, fazendo:
RewriteRule ^.*$ index.php [NC,E=no-gzip:1,L]
E mesmo que o mencionado anteriormente
SetEnv no-gzip 1
funcionou bem, a RewriteRule
flag não iria perceber. Em seguida, examinei todos os tipos de perguntas relacionadas sobre o Stack Overflow, como essa este . Mas eles não ofereceram soluções satisfatórias.
Eu então recorri momentaneamente a definir a variável de ambiente de dentro do PHP com apache_setenv( 'no-gzip', 1 );
, o que fez o truque. Mas isso não parecia certo e também me fez perguntar por que o maldito RewriteRule
flag não funcionaria tão bem.
Em seguida, decidi fazer um var_dump( $_SERVER )
, para ver se o sinalizador RewriteRule
estava realmente definido, apenas para ser confrontado com um antigo inimigo que eu tinha esquecido :
array(39) {
["REDIRECT_no-gzip"]=>
string(1) "1"
["REDIRECT_APP_ENV"]=>
string(11) "development"
/* etc. */
}
O maldito REDIRECT_
que é adicionado às variáveis de ambiente ao reescrever.
Tive a impressão de que a sinalização L
no meu último RewriteRule
deveria significar a interrupção de reescrita, mas aparentemente eu interpretei mal esta regra e suas condições:
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^.*$ - [NC,L]
Como RewriteRule ^.*$ index.php [NC,E=no-gzip:1,L]
reescreve para index.php
, que é um arquivo normal ( -s
), as condições e regras mencionadas anteriormente ainda aparecem.
Agora que alterei essa regra para
RewriteRule !^index.php - [NC,L]
tudo está finalmente funcionando como desejado!