Recentemente tivemos que mover / task para / public / task, e gostaria de configurar o Apache para redirecionar de acordo.
No entanto, usar o mod_rewrite, embora funcione no navegador, parece interromper os aplicativos que fazem chamadas de API para o local acima. O que acontece é que o aplicativo retorna uma página com a mensagem dizendo que a página foi movida, mas o aplicativo não segue o redirecionamento.
Portanto, há uma maneira de simplesmente encaminhar qualquer tráfego para / task para / public / task sem "redirecionar", ou seja, retornar um código de status de redirecionamento?
EDIT: Aqui está um pouco mais de informação. Eu encontrei um teste simples para esclarecer o que estou tentando consertar. Aqui está o caminho da URL que precisa ser encaminhado:
https://mydomain.com/task
Precisa ir para:
https://mydomain.com/public/task
Se eu usar o curl no domínio original, ele apenas retornará um aviso da página de redirecionamento. Se eu adicionar o sinalizador -L, que diz ao curl para seguir os redirecionamentos, ele segue o redirecionamento com êxito.
Eu suponho que algo muito semelhante está acontecendo no aplicativo (ao qual não tenho acesso) que faz chamadas para o caminho de URL / task. Como não posso modificar o aplicativo para que ele siga os redirecionamentos corretamente, estou procurando uma solução que eu possa implementar no Apache.
EDIT 2:
Obrigado a todos pela sua contribuição. A sugestão de ryanm de usar a bandeira [P] na reescrita funcionou. Aqui está tudo o que eu fiz:
O Apache tem três maneiras, aparentemente, para encaminhar ou redirecionar visitantes para um URL: Alias, Proxy e Rewrite.
O alias parece ser a solução mais óbvia, pois encaminha silenciosamente o vistor para o novo local especificado. Infelizmente isso não funcionou para mim, porque os Aliases exigem a especificação do novo local no sistema de arquivos real e, com o Jboss, esse local muda a cada reimplantação / reinicialização.
Usar ProxyPass também parecia funcionar, e possivelmente poderia, mas de qualquer forma que eu configurei, o curl retornaria um resultado vazio, e não parecia que algo estivesse acontecendo. Aqui está o comando Proxy que eu usei sem sucesso:
ProxyPass /task http://localhost:8080/public/task
Finalmente, o redirecionamento (com a flag [P]) corrigiu o problema. Meu redirecionamento inicial ficou assim:
RewriteRule ^/task/(.*)$ public/task/$1 [R,L]
Com o [R], o Apache estava retornando cabeçalhos de redirecionamento para o cliente, o que funcionava bem em qualquer navegador, mas fazia com que aplicativos como o curl interrompessem uma página que dizia para redirecionar. Curl precisava do sinalizador -L para seguir o redirecionamento.
Finalmente, usando uma combinação de ProxyPass e Rewrite, consegui que funcionasse. Eu usei aquela bandeira [P] sob a sugestão de ryanm e a onda agora seguiria o redirecionamento sem ter que usar a bandeira -L. Minha diretiva final ficou assim:
RewriteRule ^/task/(.*)$ http://localhost:8080/public/task/$1 [P]
Obrigado mais uma vez a todos pela ajuda!