如何使用 Apache 中的代理模块重定向 URL?

8 http-proxy redirect apache-2.2

这似乎是一个非常基本的问题,但我很难找到一个简单的解决方案,因此感谢您对我的帮助和耐心:

我想配置我的 Apache 代理服务器以重定向某些 URL,例如,对 www.olddomain.com 的 Web 浏览器 HTTP 请求被传递到代理服务器,然后代理服务器将请求路由到 www.newdomain.com,后者发送响应到代理服务器,然后将其传递回 Web 浏览器。

看起来很简单,但我不知道如何在 Apache 上实现这一点。我知道 Squid/Squirm 提供了这个功能,所以我猜我错过了一些非常基本的东西。我知道我可以使用 RewriteRule 来动态修改 URL 并将其传递给代理服务器,但我实际上想要做相反的事情,即代理服务器接收原始 URL,应用 RewriteRule,然后将 HTTP 请求转发到新的网址。

希望这是有道理的。在此先感谢您的帮助。

bas*_*lei 7

根据您对我之前的回答的评论,我认为您正在使用 Apache 作为转发代理 ( ProxyRequests On)。您可以使用mod_rewrite代理通过特定 URL 的传递。

你可能在你的 Apache 配置中有这样的东西:

ProxyRequests On
ProxyVia On
<Proxy *>
   Order deny,allow
   Allow from xx.xx.xx.xx
</Proxy>
Run Code Online (Sandbox Code Playgroud)

然后您必须添加以下内容,以便代理传递来自www.olddomain.com/footo 的所有请求www.newdomain.com/bar

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule /foo(.*)$ http://www.newdomain.com/bar/$1 [P,L]
Run Code Online (Sandbox Code Playgroud)

它的作用是:

  • 当向主机发出请求时www.olddomain.comRewriteRule将触发。
  • 这条规则替换/foohttp://www.newdomain.com/bar/
  • 替补交给mod_proxyP)。
  • 停止重写 ( L)。

结果示例:

  • 浏览器配置为使用您的 Apache 作为代理服务器。
  • 它要求www.olddomain.com/foo/test.html.
  • 您的 Apache 会将其重写为www.newdomain.com/bar/test.html.
  • 它将从负责的 Web 服务器请求此页面。
  • 将结果作为 返回给浏览器www.olddomain.com/foo/test.html