1

我有一个 apache 2.2,我正在使用 mod_rewrite。我的目标是将流量从 http://localhost:80/AA转发到http://localhost:8090/BB。所以我有一个简单的规则

重写规则http://localhost:80/AA http://localhost:8090/BB

我的问题是客户端收到“302 Found”。我希望 RewriteRule 会将流量从 AA 转发到 BB,最后 BB 会将响应发送给我的客户。

我的配置有问题吗?

4

3 回答 3

1

请参阅RewriteRule的文档

您想要做的是将 R 标志添加到您的规则中,以进行重定向。

RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]

L最后一条规则。

于 2010-11-07T15:14:38.473 回答
0

RewriteRule 的左侧或模式应该只是您要匹配的文件名,例如^/AA$. 如果您还想确保主机和端口匹配特定值,则应设置 RewriteCond 以匹配%{HTTP_HOST}%{SERVER_PORT}。然而,后者可能是不必要的,除非您的 Web 服务器配置了多个域和端口。

这是未经测试的,但是是这样的:

RewriteCond %{HTTP_HOST}   ^localhost
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/AA$          http://localhost:8090/BB

我建议你先试试这个:

RewriteRule ^/AA$          http://localhost:8090/BB

并在需要时添加 RewriteCond。

根据评论进行编辑:如果您试图避免“302”响应,则不能针对您描述的情况这样做。当您使用 mod_rewrite 从一个主机重定向到另一个主机时,您将收到两个响应发送到您的浏览器。第一个是 302,它告诉浏览器转到第二个 URL。第二个响应应该是 200。

使用 mod_rewrite,如果重写是从同一服务器和端口上的一页到另一页,则可以避免中间重定向。在这种情况下,重写是内部的,Web 服务器可以响应 BB 页面,即使请求是针对 AA 的。如果您使用不同的服务器或端口,则 AA 的 Web 服务器无法访问页面 BB,因此它会通过重定向到具有访问权限的服务器进行响应。

如果您可以重新配置您的站点以对 AA 和 BB 使用相同的端口,则可以使其正常工作。如果没有,我认为您可以使用mod_proxy做您想做的事。我从未使用过 mod_proxy,所以我不确定你需要做什么。

于 2010-11-07T15:49:14.713 回答
0

如果你想转发流量,我想mod_rewrite不能这样做。您最好使用mod_proxyhttp ://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypassreverse

文档中的示例:

ProxyRequests Off

<Proxy *>
   Order deny,allow
  Allow from all
</Proxy>

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
于 2010-11-08T18:29:34.967 回答