<-
Apache > HTTP Server > 文件 > 版本 2.4 > 重寫

使用 mod_rewrite 進行代理

可用的語言:  en  |  fr 

這份文件補充了 mod_rewrite 參考文件。它說明如何使用 RewriteRule 的 [P] 旗標將內容代理到其他伺服器。提供多項說明一般場景的食譜。

Support Apache!

另請參閱

top

使用 mod_rewrite 代理內容

說明

mod_rewrite 提供 [P] 旗標,它允許網址經由 mod_proxy 傳遞到其他伺服器。這裡提供兩個範例。在其中一個範例中,網址直接傳遞到另外一個伺服器,並以如同是本機網址的方式提供服務。在另一個範例中,我們將找不到的內容代理到後端伺服器。

解決方案

如要單純將網址對應到另外一個伺服器,我們使用 [P] 旗標,如下所示:

RewriteEngine  on
RewriteBase    "/products/"
RewriteRule    "^widget/(.*)$"  "http://product.example.com/widget/$1"  [P]
ProxyPassReverse "/products/widget/" "http://product.example.com/widget/"

在第二個範例中,我們只有在無法在本地端找到資源時,才代理請求。這在您從一個伺服器遷移到另一個伺服器,而且不確定是否所有內容都已遷移完畢時很有用。

RewriteCond "%{REQUEST_FILENAME}"       !-f
RewriteCond "%{REQUEST_FILENAME}"       !-d
RewriteRule "^/(.*)" "http://old.example.com/$1" [P]
ProxyPassReverse "/" "http://old.example.com/"
討論

在每一種情況,我們加入 ProxyPassReverse 指令,以確保任何後端發出的重新導向都能正確傳遞給客戶端。

儘量在任何情況下優先使用 ProxyPassProxyPassMatch,而非使用 mod_rewrite。

可用的語言:  en  |  fr 

top

留言

注意
這裡並非問與答區。張貼於此的留言應針對改進文件或伺服器的建議,並且如果這些建議已被實作,或者被視為無效/離題,可能會被我們的管理員移除。有關如何管理 Apache HTTP Server 的問題,應發送至我們在 Libera.chat 上的 IRC 頻道 #httpd,或發送到我們的 郵件列表