Apache-2.4
帶有 RewriteCond 的 Apache 條件反向代理
我有一個有移動版頁面的網站,由於我的網站位於反向代理之後,我需要一個條件函式來決定向訪問者顯示哪個版本。我使用的是 Apache 2.4,ProxyPass 和 ProxyReverse 不允許在“If - Elseif”語句中,所以我嘗試了 RewriteCond,但沒有成功。
這是我的虛擬主機
<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,因為該指令完全執行其他操作,即處理來自後端的重定向,您首先是反向代理。