Estou trabalhando em um site em que estou usando o SSI para definir uma variável em uma página HTML que é analisada e a variável deve ser escolhida por um script depois de uma mod_rewrite
reescrever. Isso funciona na minha configuração local, mas, por algum motivo, ele não está no servidor de produção (ambos são apache 2.2.22). Aqui estão os bits relevantes:
O script perl
:
my $working = ($ENV{'HTTP_my_var'} || $ENV{'REDIRECT_HTTP_my_var'}) || "NO";
print "Content-type: text/html\n\n";
print "is it working? <b>$working</b>";
linhas relevantes de .htaccess
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ /$1.html [L]
RewriteRule ^my_tst$ /cgi-bin/my_tst.cgi [L]
O arquivo HTML:
<!--#set var="HTTP_my_var" value="YES" -->
<!--#include virtual="/cgi-bin/my_tst.cgi" -->
<br>
<!--#include virtual="/my_tst" -->
Este é o resultado na minha máquina local:
is it working? YES
is it working? YES
Mas no servidor de produção:
is it working? YES
is it working? NO
Comparando as configurações do servidor, a única coisa que realmente me vem à mente é que no servidor de produção httpd -M
não lista apreq_module (shared)
, e o servidor local não lista fcgid_module (shared)
(entre outros). Poderia ser devido a algum destes? O que poderia estar causando esse estranho descompasso no comportamento?
Caso seja necessário mencionar, quando eu fizer um dump de %ENV
, nenhum das variáveis REDIRECT _ * aparecerão no servidor de produção na parte de reescrita (o segunda include
diretiva do HTML), enquanto eles fazem no servidor local, e a saída não-reescrita da diretiva include.
Editar: Adicionar outra variável, HTTP_my_var2 , que está definida no .htaccess via uma diretiva SetEnv
, não tem problemas, ou seja, o valor não é descartado na reescrita.
No entanto, definir a variável com SetEnvIf
aciona o problema,
Editar1: Confirmado, parece haver uma interação estranha entre mod_suexec
, mod_rewrite
e mod_include
(assim como mod_setenvif
). Eu reproduzi o problema localmente, executando-o com suexec
ativado. Desativar o suexec comentando a linha SuexecUserGroup
na entrada VirtualHost
(e reiniciando o servidor) produz os resultados desejados. Agora, para investigar possíveis soluções.
Isso pode realmente ser um bug no httpd apache.