As variáveis de ambiente não estão disponíveis no servidor após o mod_rewrite, mas funcionam localmente

5

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.

    
por insaner 17.11.2016 / 19:02

0 respostas