apache / 2.4 / reference / rewrite-proxy.html

使用 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 端。

考虑尽可能使用ProxyPassProxyPassMatch代替 mod_rewrite。