Apache - Como redirecionar o usuário para um determinado URL

3

No meu site eu tenho Solicitações de Domínios Cruzados com, às vezes, respostas HTTP 302.

Eu quero fazer duas coisas:

  • para solicitações HTTP OPTIONS : código HTTP 200, sem redirecionamento de acompanhamento
  • para solicitações HTTP POST, GET : siga uma nova URL e execute todas as 302, se necessário.

Como as URLs a seguir com get e post são várias (várias APIs), fiz algo assim:

link (com o URL myapi.com codificado)

Aqui está o meu proxy vhost:

<VirtualHost *:80>
  DocumentRoot "C:/..."
  ServerName http://myproxyurl.com

  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
  Header always set Access-Control-Max-Age "1000"
  Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

  RewriteEngine on
  RewriteCond %{REQUEST_METHOD} OPTIONS
  RewriteRule ^(.*)$ $1 [R=200,L]

  RewriteCond %{QUERY_STRING} ^service=(.*)
  RewriteRule (.*) $1 [R,L]
</VirtualHost>

Mas com isso eu tenho um loop de redirecionamento no chrome assim: Captura de tela da guia "Rede do Chrome"

Como posso corrigir esse loop de rediecção? Estou aberto a uma solução melhor que "? Service=", se houver.

Obrigado pela ajuda.

EDIT: Novo Vhost conf

Com: Mod-proxy com alternativas de string de consulta? perto de solução ... mas ainda obter um código 500

<VirtualHost *:80>
  LogLevel alert rewrite:trace8
  DocumentRoot "C:/..."
  ServerName myproxyurl.com
  Header always set Access-Control-Allow-Origin "*"
  Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
  Header always set Access-Control-Max-Age "1000"
  Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"
  AllowEncodedSlashes On
  RewriteEngine on
  RewriteCond %{REQUEST_METHOD} OPTIONS
  RewriteRule ^(.*)$ $1 [R=200,L]

  RewriteMap unescape int:unescape

  RewriteCond %{QUERY_STRING} ^service=(.*)$
  RewriteRule ^/ ${unescape:%1} [P,L]


</VirtualHost>
    
por CyrilleGuimezanes 16.12.2015 / 10:01

1 resposta

0

VHOST final:

<VirtualHost *:80>
    DocumentRoot "C:/..."
    ServerName myproxyurl.com
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
    Header always set Access-Control-Max-Age "1000"
    Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin, authorization, accept, client-security-token"

    RewriteEngine on
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]

    RewriteMap unescape int:unescape

    RewriteCond %{QUERY_STRING} ^service=(.*)$
    RewriteRule ^/ ${unescape:%1} [P,NE,R=302,L]

</VirtualHost>

Não tenho certeza se todas essas linhas / flags são necessárias, mas obtenho os resultados!

Você precisa ativar esses módulos do apache:

  • mod_rewrite
  • proxy_module
  • proxy_http_module
  • headers_module

É bom saber : Eu li que esse método não é seguro porque qualquer um pode colocar qualquer URL no serviço param ... no meu caso eu posso confiar nos usuários. / p>     

por 16.12.2015 / 17:11