Apache Conditional Reverse Proxy mit RewriteCond

Apache Conditional Reverse Proxy mit RewriteCond

Ich habe eine Website mit einer Seite für die mobile Version. Da sich meine Website hinter einem Reverse-Proxy befindet, brauche ich eine bedingte Funktion, die entscheiden kann, welche Version den Besuchern angezeigt werden soll. Ich verwende Apache 2.4, ProxyPass und ProxyReverse dürfen nicht in „If - Elseif“-Anweisungen enthalten sein, also habe ich es mit RewriteCond versucht, was jedoch nicht funktioniert hat.

Hier ist mein 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>

Mit dem oben genannten VirtualHost zeigt mein Reverse-Proxy nur die mobile Version an. Wie kann ich das lösen? Was muss ich hinzufügen/ändern, damit es funktioniert?

Antwort1

Sie können kein bedingtes Reverse-Proxying durchführen, indem Sie Anweisungen aus verschiedenen Modulen mischen.

In diesem Fall ist die korrekte Verwendung von mod_rewrite durchgehend:

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/

Beachten Sie, dass der Schlüssel hier das Flag „P“ ist, um mod_rewrite als Proxy statt als Umleitung zu verwenden.

Beachten Sie auch, dass Sie weiterhin ProxyPassReverse verwenden müssen, da diese Anweisung etwas völlig anderes bewirkt, nämlich sich mit Weiterleitungen befasst, die vom Backend kommen, für das Sie den Reverse-Proxy verwenden.

verwandte Informationen