On this page
使用 mod_rewrite 进行代理
本文档是对mod_rewrite reference documentation的补充。它描述了如何使用 RewriteRule 的[P]标志将内容代理到另一台服务器。提供了许多描述常见方案的食谱。
使用 mod_rewrite 代理内容
Description:
- mod_rewrite 提供[P]标志,该标志允许 URL 通过 mod_proxy 传递到另一台服务器。这里给出两个例子。在一个示例中,URL 被直接传递到另一台服务器,并且就像是本地 URL。在另一个示例中,我们将丢失的内容代理到后端服务器。
Solution:
- 为了简单地将 URL Map 到另一台服务器,我们使用[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/"
Discussion:
- 在每种情况下,我们都添加一个ProxyPassReverse指令以确保后端发出的任何重定向均正确地传递给 Client 端。
考虑尽可能使用ProxyPass或ProxyPassMatch代替 mod_rewrite。