Proxy reverso condicional Apache com RewriteCond

Proxy reverso condicional Apache com RewriteCond

Tenho um site que possui uma página de versão mobile e, como meu site está atrás do proxy reverso, preciso de uma função condicional que possa decidir qual versão será mostrada aos visitantes. Estou usando o Apache 2.4, o ProxyPass e o ProxyReverse não podem estar dentro da instrução "If - Elseif", então tentei com RewriteCond que não teve sucesso.

Aqui está meu VirtualHost

<VirtualHost *:80>
ServerName MyWebsite.com
ServerAlias www.ReverseProxy/ ReverseProxy/m/
ProxyPreserveHost On
RewriteEngine On
RequestHeader set "Host" "MyWebsite.com"

#Show mobile version if visitors used mobile device
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
ProxyPass / http://MyWebsite.com:80/m/
ProxyPassReverse / http://MyWebsite.com:80/m/

#Show desktop version if not a mobile device
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos)" [NC]
ProxyPass / http://MyWebsite.com:80/
ProxyPassReverse / http://MyWebsite.com:80/
</VirtualHost>

Com o VirtualHost acima, meu proxy reverso mostra apenas a versão mobile. Como resolver isso? O que preciso adicionar/alterar para que funcione?

Responder1

Você não pode fazer proxy reverso condicional misturando diretivas de módulos diferentes.

A maneira correta é usar mod_rewrite totalmente para este caso:

RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^/(.*) http://MyWebsite.com:80/m/$1 [P,L]
ProxyPassReverse / http://MyWebsite.com:80/m/

Observe que a chave aqui é o sinalizador "P" para tornar o proxy mod_rewrite em vez de redirecionar.

Observe também que você ainda precisa usar ProxyPassReverse porque esta diretiva faz algo totalmente diferente, ou seja, lidar com redirecionamentos vindos do back-end em que você está fazendo proxy reverso em primeiro lugar.

informação relacionada