<-
Apache > HTTP 服务器 > 文档 > 版本 2.5 > Rewrite

使用 mod_rewrite 进行代理

可用语言:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

本文档是 mod_rewrite 参考文档的补充。它描述了如何使用 RewriteRule 的 [P] 标志将内容代理到另一台服务器。 提供了若干描述常见场景的配置方案。

参见

top

使用 mod_rewrite 代理内容

描述:

mod_rewrite 提供了 [P] 标志,允许 URL 通过 mod_proxy 传递到另一台服务器。这里给出两个示例。 在一个示例中,URL 被直接传递到另一台服务器,并像本地 URL 一样提供服务。 在另一个示例中,我们将缺失的内容代理到后端服务器。

解决方案:

要简单地将 URL 映射到另一台服务器,我们使用 [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

可用语言:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn