
Tengo un sitio web que tiene una página de versión móvil y, dado que mi sitio web está detrás del proxy inverso, necesito una función condicional que pueda decidir qué versión mostrar a los visitantes. Estoy usando Apache 2.4, ProxyPass y ProxyReverse no permiten estar dentro de la declaración "If - Elseif", así que probé con RewriteCond, pero no tuvo éxito.
Aquí está mi 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>
Con el VirtualHost anterior, mi proxy inverso solo muestra la versión móvil. ¿Cómo solucionar esto? ¿Qué necesito agregar/cambiar para que funcione?
Respuesta1
No se pueden mezclar directivas de proxy inverso condicional de diferentes módulos.
La forma correcta es usar mod_rewrite completamente 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/
Tenga en cuenta que la clave aquí es la bandera "P" para hacer que mod_rewrite sea proxy en lugar de redirigir.
También tenga en cuenta que todavía tiene que usar ProxyPassReverse porque esta directiva hace algo completamente diferente, es decir, lidiar con las redirecciones provenientes del backend en el que está realizando el proxy inverso en primer lugar.