我有一个 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 会将响应发送给我的客户。
我的配置有问题吗?
我有一个 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 会将响应发送给我的客户。
我的配置有问题吗?
您想要做的是将 R 标志添加到您的规则中,以进行重定向。
RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]
L
最后一条规则。
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,所以我不确定你需要做什么。
如果你想转发流量,我想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