mod_rewrite não adicionando a variável de ambiente REDIRECT_URL

2

Nós rodamos um site baseado no Zend Framework usando o apache httpd (2.2) com mod_rewrite para SEO e usabilidade amigável URL: s. Recentemente, adicionamos mod_proxy (e mod_proxy_balancer, mod_proxy_http, mod_rpaf ) para configurar um host virtual do balanceador de carga.

Nossa configuração agora se parece com:

external.site.com (vhost on server1.site.com with reverse proxy)
|-internal1.site.com (vhost on server1.site.com) 
|-internal2.site.com (vhost on server2.site.com)

Em que internal1 & internal2 atende a maior parte do conteúdo dinâmico e external exibe conteúdo estático, além de algumas páginas de tipo de administrador. Todos os vhosts têm o mesmo código e .htaccess setup.

O problema é que em external.site.com o RewriteRule não adiciona os cabeçalhos corretos ao ambiente de solicitação, especificamente REDIRECT_URL do qual nós e o ZendFramework dependem. Tudo funciona bem para as solicitações que são encaminhadas para os vhosts internos.

As partes relevantes do httpd.conf:

<VirtualHost *:80>
  ServerName external.site.com
  DocumentRoot /opt/www/htdocs/
  CustomLog "/var/log/httpd-proxy-access.log" combined

  <Proxy balancer://backend/>
    Balancermember http://internal1.site.com
    Balancermember http://internal2.site.com
    ProxySet lbmethod=byrequests
  </Proxy>
  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyPass /static/ !
  ProxyPass /config/ !
  ProxyPass / balancer://backend/
  ProxyPassReverse / balancer://backend/
</VirtualHost>
<VirtualHost *:80>
  ServerName internal1.site.com

  RPAFenable On
  RPAFproxy_ips 127.0.0.1
</VirtualHost>

Do arquivo .htaccess :

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^.*robots.txt
RewriteCond %{REQUEST_URI} !^.*/static/.*
  RewriteRule .* index.php [L]

php_flag magic_quotes_gpc off 
php_flag register_globals off

Como só há um problema no external vhost, supomos que seja um problema com a combinação mod_proxy e mod_rewrite . Alguma idéia?

Atenciosamente

    
por Paso 12.06.2009 / 14:39

4 respostas

0

Acredito que trabalhamos em torno deste problema atualizando o Zend Framework, versões posteriores não dependem de REQUEST_URL. Parece que REQUEST_URL tem um comportamento diferente, dependendo de quais módulos estão instalados. Consulte este tópico da lista de discussão

    
por 06.08.2009 / 13:01
0

Não sou de forma alguma um especialista, mas tive que colocar [OR] no meu arquivo. Conforme declarado aqui

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^.*robots.txt [OR]
RewriteCond %{REQUEST_URI} !^.*/static/.*
RewriteRule .* index.php [L]
    
por 12.06.2009 / 22:32
0

Não sei se isso se aplica ao seu aplicativo ou não, mas você não pode usar o conteúdo de $_SERVER["REQUEST_URI"] ?

    
por 22.06.2009 / 17:45
0

Você já tentou algo como:

RewriteRule .* index.php [L,E=REQUEST_URL:$ENV{'REQUEST_URL'}]

Basicamente, a ideia é pegá-lo de um ambiente e simplesmente colocá-lo no próximo. Não tenho certeza se isso vai funcionar, mas não vai doer tentar.

    
por 06.08.2009 / 00:22