这似乎是一个非常基本的问题,但我很难找到一个简单的解决方案,因此非常感谢大家在这个问题上的帮助和耐心:
我想配置我的 Apache 代理服务器来重定向某些 URL,这样,例如,Web 浏览器对 www.olddomain.com 的 HTTP 请求将传递到代理服务器,然后代理服务器将请求路由到 www.newdomain.com,代理服务器将响应发送到代理服务器,然后代理服务器将其传回 Web 浏览器。
看起来很简单,但我不知道如何在 Apache 上实现这一点。我知道 Squid/Squirm 提供了此功能,所以我猜我遗漏了一些非常基本的东西。我知道我可以使用 RewriteRule 动态修改 URL 并将其传递给代理服务器,但我实际上想做相反的事情,即代理服务器接收原始 URL,应用 RewriteRule,然后将 HTTP 请求转发到新 URL。
希望这有意义。提前感谢任何帮助。
答案1
从您对我之前的回答的评论中,我了解到您正在使用 Apache 作为转发代理 ( ProxyRequests On
)。您可以使用mod_rewrite
代理传递特定的 URL。
您的 Apache 配置中可能会出现类似这样的内容:
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from xx.xx.xx.xx
</Proxy>
然后,您必须添加以下内容以便代理传递从www.olddomain.com/foo
到的所有请求www.newdomain.com/bar
:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$
RewriteRule /foo(.*)$ http://www.newdomain.com/bar/$1 [P,L]
这样做的目的是:
- 当向主机发出请求时
www.olddomain.com
,RewriteRule
将会触发。 - 该规则替代
/foo
了http://www.newdomain.com/bar/
。 - 替换交给
mod_proxy
(P
)。 - 停止重写(
L
)。
示例结果:
- 浏览器配置为使用您的 Apache 作为代理服务器。
- 它请求
www.olddomain.com/foo/test.html
。 - 您的 Apache 将把它重写为
www.newdomain.com/bar/test.html
。 - 它将向负责的 Web 服务器请求此页面。
- 将结果作为 返回给浏览器
www.olddomain.com/foo/test.html
。
答案2
如果我理解正确的话,你可能想看看:mod_proxy与基于名称的虚拟主机结合
下面是一个小例子。所有来自 www.olddomain.com 虚拟主机的请求都将从 www.newdomain.com 发出,并由 apache 重写:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.olddomain.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://www.newdomain.com/
ProxyPassReverse / http://www.newdomain.com/
ProxyPassReverseCookieDomain www.newdomain.com www.olddomain.com
</VirtualHost>