mod_rewrite返回302找到

时间:2010-11-07 15:08:37

标签: windows mod-rewrite apache2 apache-config

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

RewriteRule http://localhost:80/AA http:// localhost:8090 / BB

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

我的配置有问题吗?

3 个答案:

答案 0 :(得分:1)

请参阅RewriteRule

的文档

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

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

L代表最后一条规则。

答案 1 :(得分: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,如果在相同的服务器和端口上重写是从一个页面到另一个页面,则可以避免在中间重定向。在这种情况下,重写是内部的,即使请求是针对AA,Web服务器也可以使用BB页面进行响应。如果您使用其他服务器或端口,则AA的Web服务器无权访问BB页面,因此它会通过重定向到具有访问权限的服务器进行响应。

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

答案 2 :(得分: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