O Apache RewriteRule no VirtualHosts não funciona com o regex de captura de grupo

2

Eu preciso criar um RewriteRule para delegar um caminho de URL como /tdg/image.jpg?mode=crop&width=300&height=300 para um proxy local.

O proxy precisa que a URL fornecida seja transformada no seguinte formato.

http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

Eu tentei usar primeiro a diretiva ProxyPassMatch apache, mas não consigo recuperar os dados de largura e altura da string de consulta.

ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

Eu também tentei RewriteRule

RewriteEngine On
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

E em ambos os casos, o URL de resultado para o proxy é http://localhost:8888/unsafe/x/smart/$1 , onde deve ser http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

Não tenho ideia de por que não posso buscar o valor width e height da string de consulta, usando a sintaxe group regex.

    
por Jonas Porto 17.10.2017 / 18:29

1 resposta

3

A diretiva RewriteRule corresponde apenas ao componente do caminho e não inclui a string de consulta. Experimente:

RewriteEngine On
RewriteCond %{QUERY_STRING} mode=crop.+width=(\d+)&height=(\d+)
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif)) http://localhost:8888/unsafe/%1x%2/smart/$1 [P]

Observe a diferença da referência anterior na substituição ao usar RewriteCond . Para usar referências reversas de ambos os lugares, use% N para os de RewriteCond e $ N para os que estão no RewriteRule .

    
por 17.10.2017 / 19:06