2009-10-28 136 views
0

我有一個CakePHP的應用程序,並在我的httpd.confCakePHP中的反向代理?

ProxyRequests off 
ProxyPass /forum/ http://somesite.com/phpbb3 
ProxyPass /gallery/ http://someothersite.com/gallery3 
<Location /forum/> 
     ProxyPassReverse/
</Location> 
<Location /gallery/> 
     ProxyPassReverse/
</Location> 

以下指令沒有CakePHP的這工作得很好 - 但因爲CakePHP會使用它從routes.php文件和其他來源自己的重定向邏輯,它似乎覆蓋了任何代理設置,所以任何在我的服務器上對「/ community」的調用都遵循尋找名爲CommunityController的Controller的默認路徑。

我的問題在於,我想讓一臺服務器爲多個應用程序提供服務,但保持與用戶的無縫連接 - 因此完整的PHPBB應用程序可以在「/ forum」目錄中運行,就好像它是一個控制器在CakePHP中。

有沒有人做過這件事,可以做到嗎?爲什麼mod_rewrite和/或routes.php文件覆蓋我的mod_proxy指令?

回答

1

也許不是使用mod_proxy,你可以使用mod_rewrite創建一個RewriteRule指令,[P](代理)標誌與[L](最後一條規則)標誌一起使用。

「代理| P」(強制代理):

這個標誌 使替換部分是 內部發送的代理請求和 立即(重寫處理停止 這裏)接通代理模塊。 您必須確保 替代字符串是有效的URI (通常以 http://hostname開頭),可以通過Apache代理模塊處理 。如果不是, 您將從代理 模塊中收到錯誤。使用此標誌可以實現 ProxyPass指令的更強大的實現 ,以將遠程 內容映射到本地服務器的名稱空間中。

注意:mod_proxy必須啓用 才能使用此標誌。

'最後| L'(最後一條規則):

這裏停止 重寫過程,不適用任何 更多的重寫規則。此 對應於Perl最後一個命令 或C中的break命令。使用此 標誌可防止當前 重寫的URL被以下規則進一步重寫 。例如,對於 示例,請使用它將 根路徑URL('/')重寫爲真實的 ,例如'/ e/www /'。

+0

我看了看,但我讀到,如果我使用mod重寫會有性能問題。 我想我的主要問題是爲什麼不mod_proxy優先於CakePHP路由? – FilmJ 2009-10-30 06:51:42