Apache HTTP Server 版本 2.4
本文档是对 mod_rewrite
参考文档 的补充。它描述了如何使用 RewriteRule 的 [P] 标志将内容代理到另一个服务器。提供了一些描述常见场景的示例。
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
指令,以确保后端发出的任何重定向都正确传递给客户端。
尽可能使用 ProxyPass
或 ProxyPassMatch
,而不是 mod_rewrite。