我有一个apache 2.2,我正在使用mod_rewrite。我的目标是转发来自的流量 http://localhost:80/AA到http://localhost:8090/BB。所以我有一个简单的规则
RewriteRule http://localhost:80/AA http:// localhost:8090 / BB
我的问题是客户端收到“302 Found”。我希望RewriteRule会 将流量从AA转发到BB,最后BB会将响应发送给我的客户。
我的配置有问题吗?
答案 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_proxy
:http://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