• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 动态代理与 mod_rewrite

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

    使用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指令以确保后端发出的任何重定向均正确地传递给客户端。

    考虑优先使用mod_rewrite之一ProxyPassProxyPassMatch尽可能使用它。