Como substituir parte de uma solicitação de URL antes de fazer proxy no apache 2.4?

1

Estou tentando reescrever parte de uma URL ( https://myfirstdomain.com/lool/https:/alf.mydomain.com/service/wopi/files/uuid?query_params ) antes que ocorra o proxy e tenho essa seção relevante em meu vhost SSL padrão:

 <IfModule mod_rewrite.c>
    RewriteEngine   On
    LogLevel debug rewrite:trace3

    RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]
</IfModule>

ProxyPass               /       https://localhost:2323/
ProxyPassReverse        /       https://localhost:2323/

e vejo isso nos registros de reescrita:

applying pattern '^lool/https:/alf.mydomain.com' to uri '/lool/https:/alf.mydomain.com/service/wopi/files/uuid

mas no serviço que recebe isso, vejo que a URL não foi reescrita. Ficaria grato por quaisquer pistas sobre o que estou fazendo errado. Eu estou essencialmente tentando adicionar o / extra que foi removido por um servidor proxy em algum lugar na infraestrutura que eu não tenho acesso.

EDITAR: nos registros do serviço WOPI de back-end, ele vê a URL de solicitação não modificada:

Request from 127.0.0.1:42035: GET /lool/https:/alf.mydomain.com/service/wopi/files/uuid
    
por Dark Star1 20.10.2017 / 10:33

1 resposta

1
RewriteRule ^lool/https:/alf.mydomain.com\/(.*) lool/https://alf.mydomain.com/$1 [QSA,NE]

Quando usado em um contexto host virtual , o padrão RewriteRule corresponde ao caminho completo da URL, incluindo o prefixo de barra (isso só é removido em um > diretório contexto).

Tente algo como o seguinte:

RewriteRule ^/lool/https:/(alf\.mydomain\.com/.*) /lool/https://$1 [PT,NE]

O prefixo de barra também é necessário na substituição quando usado em um contexto de host virtual, para especificar um caminho de URL relativo à raiz do documento.

Acabei de estender o padrão capturado para incluir o nome do host para salvar a repetição na substituição .

Pontos literais devem ser escapados no padrão RewriteRule . Considerando que barras ( / ) não precisam ser escapadas.

A QSA flag é supérflua aqui, pois você não está especificando uma string de consulta na substituição .

Você pode ou não precisar do sinalizador PT ( passthrough ) para obter isso escolhido por mod_proxy.

Você também deve remover o <IfModule mod_rewrite.c> wrapper - a menos que isso funcione sem o mod_rewrite? Caso contrário, você apenas irá mascarar um erro quando o mod_rewrite não estiver disponível.

    
por 20.10.2017 / 15:32