2012-08-10 122 views
1

我們正在構建一個移動網站,其網址結構與我們當前的桌面網站相匹配。我們將它們託管在同一個域中,並使用apache來使用WURFL過濾它們之間的流量,以幫助確定哪些代理位置在哪裏。Apache重定向下游404

我們的過濾規則,目前看起來是這樣:

RewriteCond %{HTTP_COOKIE} "bucket=mobile" 
RewriteRule ^(.*)$ http://internal-mobile-pool.ourdomain.com/$1 [P] 

RewriteRule ^(.*)$ http://internal-desktop-pool.ourdomain.com/$1 [P] 

我們WURFL基礎的解決方案設置「桶」的cookie我們。

我們面臨的問題是,並非我們桌面版網站上的所有網址都已在我們的移動網站上重新實施。我理想上喜歡的是上述規則適用,但如果它嘗試去移動服務器並獲得404,它會提供來自桌面服務器的內容。

ie如果某個移動設備請求www.ourdomain.com/some_desktop_only_resource.html,並且internal-mobile-pool.ourdomain.com/some_desktop_only_resource.html返回一個404 - 以返回desktop-pool.ourdomain上的內容.COM/some_desktop_only_resource.html

要僞代碼描述這個

if(isMobile) 
    response = getMobileResponse(url) 
    if(response.code != 404) 
     serveResponse(response) 
    else 
     serveResponse(getDesktopResponse(url)) 

我知道這是可能的,如果我列出所有在此文件中的支持網址 - 我想避免這種情況,我會像這個平臺識別層獨立於它所服務的應用程序。我也知道我可以通過重定向從移動應用程序本身解決這個問題,但如果可能的話,我希望這個平臺識別層是獨立的。

這是可能的使用mod_rewrite?

回答

0

不要以爲有一種方法可以使用mod_rewrite來做到這一點。因爲您使用[P]標誌進行代理,所以RewriteRule將代理請求交給mod_proxy,甚至不知道它是否通過。如果所有內容都位於同一文檔根目錄(或至少是文檔根目錄的子目錄),則可以使用-f條件檢查來查看是否存在文件。

你可以嘗試做的事情,雖然我不知道這是否可行,但是使用mod_proxy的ProxyErrorOverride along with ErrorDocument。如果您的ProxyErrorOverride處於打開狀態,理論上如果代理請求返回錯誤,mod_proxy將使用本地錯誤處理程序而不是代理服務器。然後你可以使用一個ErrorDocument 404來處理代理404的php腳本或其他東西,然後做一些關於通過本地重寫引擎重新路由回來(可能帶有特殊查詢字符串參數的重定向?),以便它可以是代理到桌面域。