У меня есть веб-сайт со страницей мобильной версии, и поскольку мой веб-сайт находится за обратным прокси-сервером, мне нужна условная функция, которая может решить, какую версию показывать посетителям. Я использую Apache 2.4, ProxyPass и ProxyReverse не могут находиться внутри оператора «If - Elseif», поэтому я попытался использовать RewriteCond, но это не увенчалось успехом.
Вот мой 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>
С VirtualHost выше мой обратный прокси-сервер показывает только мобильную версию. Как это решить? Что мне нужно добавить / изменить, чтобы он заработал?
Вы не можете использовать директивы смешивания условного обратного проксирования из разных модулей.
Правильный способ - использовать mod_rewrite полностью для этого случая:
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/
Обратите внимание, что ключевым моментом здесь является флаг «P» для создания прокси-сервера mod_rewrite вместо перенаправления.
Также обратите внимание, что вам по-прежнему нужно использовать ProxyPassReverse, потому что эта директива делает что-то совершенно другое, а именно с перенаправлениями, исходящими от бэкэнда, который вы в первую очередь используете обратное проксирование.