Um pouco novato quando se trata de configurar o httpd, mas aqui está minha situação:
Estou tentando fazer proxy de um aplicativo (vamos chamá-lo de catsapp ) sobre o qual não tenho controle com httpd.
catsapp , um aplicativo html/javascript, tem o httpd rodando na frente dele também. Mas não posso mexer com essa configuração, só posso controlar a configuração httpd de nível superior.
Acontece que dentro do index.html
de catsapp , existe uma chamada de javascript:
window.location="viewer.html"
Que se destina a carregar a página do visualizador.
Normalmente, escrever a ProxyPass
diretiva é bastante fácil e é isso que tenho atualmente:
ProxyPass /catsapp http://catsapp-server timeout=600
ProxyPassReverse /catsapp http://catsapp-server timeout=600
Isso não funciona no entanto. Se eu navegar para example.com/catsapp
, recebo um 200 OK
seguido imediatamente por 404 Not Found
porque o navegador tenta carregar example.com/viewer.html
em vez de example.com/catsapp/viewer.html
.
Existe alguma maneira de configurar o servidor httpd raiz para que, quando o catsapp chamar window.location="viewer.html"
, ele resolva example.com/catsapp/viewer.html
?
Eu acho que existem vários recursos que precisam ser carregados do seu aplicativo, então
example.com/catsapp
deve procurar um subdiretório. Sem uma barra final, os navegadores veemexample.com/catsapp
como um recurso semelhante a um arquivo, não um recurso semelhante a uma pasta. Seguindo o linkviewer.html
relativo aexample.com/catsapp
leva aexample.com/viewer.html
. No entanto, a resoluçãoviewer.html
relativa aexample.com/catsapp/
(observe a barra à direita) resolve paraexample.com/catsapp/viewer.html
.Sugiro redirecionar
example.com/catsapp
paraexample.com/catsapp/
(não internamente, mas via HTTP 3xx) e editar suaProxyPass
regra para incluir também a barra final. Por exemplo:Depois de mais algumas escavações, parece que o que eu quero fazer não é "facilmente" possível. Agora entendi que o problema é este:
Portanto, a URL incorreta está sendo decidida no lado do cliente depois que o httpd está fora de cena. O que parece que eu teria que fazer é usar algo como
mod_substitute
alterar a resposta que está sendo enviada de volta ao cliente na etapa 4 para inserir meu/catsapp
caminho personalizado antesviewer.html
. Parece feio e propenso a erros.O que decidi fazer parece ser um pouco mais robusto, mas ainda bastante específico para este caso de uso. Percebi que
index.html
existe apenas para redirecionar o cliente paraviewer.html
. Então, por que não faço isso automaticamente durante a etapa 2 acima? Eu tentei isso adicionando umRewriteRule
ao servidor httpd raiz.E parece estar funcionando muito bem. Eu não acho que existam outras áreas do aplicativo que tentem alterar o local como
index.html
faz e essa solução não funcionaria em nenhum caso em que isso acontecesse ... então espero que funcione.