Problema do slash / diretório no final do proxy do Apache

2

Eu tenho um site legado para uma instituição de caridade sendo executada em uma instância antiga do Apache 1.3, atrás do Apache 2 executando o proxypass. Quando uma solicitação chega ao example.com, o Apache 2 a envia internamente para localhost: 8080, o que funciona bem.

O problema:

example.com/blog / funciona, mas example.com/blog (sem barra) não. O URL para o qual ele muda no Chrome é example.com:8080/blog / , que não existe.

O mesmo é verdadeiro para todos os outros diretórios.

Apache 2:

<VirtualHost *:80>
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Apache 1:

NameVirtualHost *:8080
<VirtualHost *:8080>
    DocumentRoot /usr/www/html/
    ServerName example.com
    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)$
    RewriteRule .* - [F]
</VirtualHost>

Eu achei que uma solução simples seria adicionar um rewriterule no virtualhost, mas não obtive nenhum sucesso, apesar de muitas tentativas. Eu acho que uma questão chave é que está olhando errado example.com:8080 quando a barra não está lá. Seria ótimo se alguém pudesse me ajudar, me perguntar qualquer informação adicional que seria útil.

    
por Ben 15.07.2011 / 15:12

1 resposta

1

Não vejo nenhuma diretiva ProxyPassReverse ou mod_proxy_html na sua configuração; A falta de ProxyPassReverse , especificamente, provavelmente será a causa do seu problema, já que o back-end Apache está enviando um redirecionamento para o URL slashful, mas tem seu nome interno no cabeçalho Location: e sem ProxyPassReverse o frontend Apache é apenas deixar vazar esse URL interno.

mod_proxy_html é para os problemas equivalentes, mas em HTML em vez de cabeçalhos HTTP. Também vale a pena usar, a menos que você esteja realmente certo de que ninguém irá colocar um URL completo no HTML (o que, para qualquer webapp dinâmica, é uma má aposta).

    
por 15.07.2011 / 15:19