Apache: fazer correspondência e agrupamento de padrões com um RewriteRule leva ao caminho local em vez de obter o componente de URL

1

Eu pesquisei se isso foi respondido antes sem alegria.

Gostaria de usar a correspondência de padrões de RewriteRule para obter o caminho solicitado e redirecionar o cliente para outro local, mantendo o caminho no redirecionamento resultante.

Eu pensei que algo assim faria o truque:

RewriteRule.  ^(.*)$ http://testserver/test/$1

Se o usuário solicitar foo , envie-o para test/foo (não se preocupe com looping, eu coloquei um pouco de RewriteCond logic para evitar isso).

Para minha surpresa, o Apache acaba com algo como http://testserver/foo/var/www/html . O que aconteceu foi o seguinte:

/bar   /var/www/html/bar

Eu aumentei o nível de log do mod_rewrite e descobri que ele correspondia, mas o Apache foi expandido correspondendo ao caminho local de / , que é /var/www/html e usando isso para redirecionar o navegador, o que não funcionará.

Eu tentei usar [PT] , o que pensei que impediria a expansão, mas isso não aconteceu.

Alguma ideia de como posso impedir que isso aconteça? Qualquer ajuda seria apreciada.

    
por Gustau Pérez 22.08.2017 / 09:57

1 resposta

0

Respondendo a @MrWhite, estou anexando o bloco <if> relevante:

<If "env('var1') =='1' && env('var2') =='0' && env('var3') =='1'"  >
           Define                  requestUri              $1
           Define                  backend              $customDomain
           RewriteEngine           on
           RewriteCond             %{REQUEST_URI}          !^/redir/.*$
           RewriteRule             ^(.*)$                  /redir/%{REQUEST_URI}
</If>           

Este bloco está em <Location> block, que por sua vez está abaixo do bloco principal <VirtualHost> .

Se eu removê-lo do bloco <If> , o padrão ^(.*)$ nos fornecerá o mesmo %{REQUEST_URI} retornará. Dentro do bloco <If> , ele se expande para o sistema de arquivos local + o recurso solicitado (se eu solicitar que /index.html seja expandido para /var/www/html/index.html .

Não se preocupe com os Definir no bloco, eles não fazem nada e não têm efeito.

Obrigado

    
por 23.08.2017 / 14:18