我有一个Apache 2.2,我使用mod_rewrite。我的目标是将流量从 http://localhost:80/AA转发到http://localhost:8090/BB。所以我有一个简单的规则mod_rewrite返回302找到
重写规则http://localhost:80/AA的http://本地主机:8090/BB
我的问题是客户端收到 “302找到”。我希望RewriteRule将 转发从AA到BB的流量,最后BB会将响应发送给我的客户端。
我的配置有问题吗?
我有一个Apache 2.2,我使用mod_rewrite。我的目标是将流量从 http://localhost:80/AA转发到http://localhost:8090/BB。所以我有一个简单的规则mod_rewrite返回302找到
重写规则http://localhost:80/AA的http://本地主机:8090/BB
我的问题是客户端收到 “302找到”。我希望RewriteRule将 转发从AA到BB的流量,最后BB会将响应发送给我的客户端。
我的配置有问题吗?
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,所以我不知道你需要做什么。
我只用了你的RewriteRule,并在行尾添加了[R = permanent,L]。结果是将错误301发送回客户端。我想要的是从AA转发到BB的规则,然后服务器在8090处将向我的客户端发送http 200 OK – cateof 2010-11-07 16:07:02
在8090处的BB页面是否已成功显示?如果是这样,那么它工作。 :80发送301或302重定向,然后8090发送200.使用mod_rewrite从一台服务器重定向到另一台服务器时,您无法避开中间的301。 – bmb 2010-11-07 16:38:28
mod_proxy的问题在于,您不能在替换URL中使用问号字符。例如foo.example.com/bar?lala会发出抱怨,因为?lala被视为查询字符串。这是mod_proxy - cateof 0秒前的问题 – cateof 2010-11-09 16:24:55
的文档你想做的事是R标志添加到您的规则,重定向。
RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]
L
为最后的规则。
如果您希望转发流量,我猜0123'不能这样做。你最好使用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
我假设有在游戏中无论是两个不同的Web服务器在这里,'一个聆听80'和'8090'一个聆听,或你有2个不同的VirtualHosts在这2个端口上监听Apache吗? – 2010-11-07 15:12:12
一个tomcat服务器位于http:// localhost:8090/BB。不过,我不想告诉我的客户更改网址。所以我安装了apache以使用mod_rewrite功能,并从端口80 t0 8090发送流量。我不知道这是否是最佳解决方案... – cateof 2010-11-07 15:21:09
我想我对您的问题感到困惑。当你使用mod_rewrite从一台主机重定向到另一台主机时,你*会得到两个发送到浏览器的响应。第一个是302,它告诉浏览器转到第二个URL。第二个响应应该是200.除了响应代码之外,重定向是否工作? – bmb 2010-11-07 16:35:35