<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 重写

使用 mod_rewrite 进行代理

可用语言:  en  |  fr 

本文档是对 mod_rewrite 参考文档 的补充。它描述了如何使用 RewriteRule 的 [P] 标志将内容代理到另一个服务器。提供了一些描述常见场景的示例。

Support Apache!

另请参阅

top

使用 mod_rewrite 代理内容

描述

mod_rewrite 提供了 [P] 标志,它允许通过 mod_proxy 将 URL 传递到另一个服务器。这里给出了两个示例。在一个示例中,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。

可用语言:  en  |  fr 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/偏离主题,则可能被我们的版主删除。有关如何管理 Apache HTTP Server 的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上),或发送到我们的 邮件列表