Windows mod_rewrite返回找到的302
我有一个Apache2.2,我正在使用mod_rewrite。我的目标是转发来自 到所以我有一个简单的规则 重写规则http://localhost:8090/BB 我的问题是客户端收到“302已找到”。我希望规则会被改写 将流量从AA转发到BB,最后BB将向我的客户发送响应Windows mod_rewrite返回找到的302,windows,mod-rewrite,apache2,apache-config,Windows,Mod Rewrite,Apache2,Apache Config,我有一个Apache2.2,我正在使用mod_rewrite。我的目标是转发来自 到所以我有一个简单的规则 重写规则http://localhost:8090/BB 我的问题是客户端收到“302已找到”。我希望规则会被改写 将流量从AA转发到BB,最后BB将向我的客户发送响应 我的配置有问题吗?有关详细信息,请参阅文档 您要做的是将R标志添加到规则中,以便重定向 RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=perm
我的配置有问题吗?有关详细信息,请参阅文档 您要做的是将R标志添加到规则中,以便重定向
RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]
L
查看最后一条规则。有关详细信息,请参阅文档
您要做的是将R标志添加到规则中,以便重定向
RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]
L
用于最后一条规则。重写规则的左侧或模式应该是您要匹配的文件名,例如^/AA$
。如果还希望确保主机和端口匹配特定值,则应将RewriteCond设置为匹配%{HTTP\u host}
和%{SERVER\u port}
。但是,后者可能是不必要的,除非您的web服务器配置为多个域和端口
这是未经测试的,但类似于:
RewriteCond %{HTTP_HOST} ^localhost
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/AA$ http://localhost:8090/BB
我建议您首先尝试以下方法:
RewriteRule ^/AA$ http://localhost:8090/BB
如果你需要的话,加上重写条件
根据评论进行编辑:如果您试图避免“302”响应,则无法针对您描述的情况进行编辑。当您使用mod_rewrite从一台主机重定向到另一台主机时,您将收到两个发送到浏览器的响应。第一个是302,它告诉浏览器转到第二个URL。第二个响应应该是200
< M>重写,如果在同一个服务器和端口上重写从一个页面到另一个页面,则可以避免中间重定向。在这种情况下,重写是内部的,web服务器可以使用BB页面进行响应,即使请求是针对AA的。如果您使用不同的服务器或端口,AA的web服务器无法访问页面BB,因此它会重定向到具有访问权限的服务器
如果你能重新配置你的站点,让AA和BB使用相同的端口,你就可以让它工作了。如果没有,我想你可以用它做你想做的事。我从未使用过mod_proxy,因此我不确定您需要做什么。重写规则的左侧或模式应该是您要匹配的文件名,例如
^/AA$
。如果还希望确保主机和端口匹配特定值,则应将RewriteCond设置为匹配%{HTTP\u host}
和%{SERVER\u port}
。但是,后者可能是不必要的,除非您的web服务器配置为多个域和端口
这是未经测试的,但类似于:
RewriteCond %{HTTP_HOST} ^localhost
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/AA$ http://localhost:8090/BB
我建议您首先尝试以下方法:
RewriteRule ^/AA$ http://localhost:8090/BB
如果你需要的话,加上重写条件
根据评论进行编辑:如果您试图避免“302”响应,则无法针对您描述的情况进行编辑。当您使用mod_rewrite从一台主机重定向到另一台主机时,您将收到两个发送到浏览器的响应。第一个是302,它告诉浏览器转到第二个URL。第二个响应应该是200
< M>重写,如果在同一个服务器和端口上重写从一个页面到另一个页面,则可以避免中间重定向。在这种情况下,重写是内部的,web服务器可以使用BB页面进行响应,即使请求是针对AA的。如果您使用不同的服务器或端口,AA的web服务器无法访问页面BB,因此它会重定向到具有访问权限的服务器
如果你能重新配置你的站点,让AA和BB使用相同的端口,你就可以让它工作了。如果没有,我想你可以用它做你想做的事。我从来没有使用过mod_proxy,所以我不确定您需要做什么。如果您希望转发流量,我想
mod_rewrite
无法做到这一点。您最好使用mod\u proxy
:
文档中的示例:
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
ProxyRequests关闭
命令拒绝,允许
通融
ProxyPass/foohttp://foo.example.com/bar
ProxyPassReverse/foohttp://foo.example.com/bar
如果您希望转发流量,我想mod\u rewrite
无法做到这一点。您最好使用mod\u proxy
:
文档中的示例:
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
ProxyRequests关闭
命令拒绝,允许
通融
ProxyPass/foohttp://foo.example.com/bar
ProxyPassReverse/foohttp://foo.example.com/bar
我假设这里有两个不同的web服务器,一个监听80
,另一个监听8090
,或者您让Apache监听这两个端口,使用两个不同的虚拟主机?tomcat服务器位于。但是,我不想告诉我的客户更改URL。所以我安装了一个apache来使用mod_重写功能,并从端口80到8090发送流量。我不知道这是否是最佳解决方案……我想我对你的问题感到困惑。当您使用mod_rewrite从一台主机重定向到另一台主机时,您将收到两个发送到浏览器的响应。第一个是302,它告诉浏览器转到第二个URL。第二个响应应该是200。除了响应代码外,重定向是否正常?@bmb。非常感谢您抽出时间回答。我认为使用mod_rewrite,我将只有一个HTTP响应。如果我拿的是2,也就是301和200,好的,这个模型对我不适用。你对怎么做有什么建议吗?如何使用生成别名?我在回答中添加了更多信息,但简短的回答是,我认为仅使用mod_rewrite和当前设置无法实现您的目的。我假设这里有两个不同的web服务器,一个在80
上侦听,另一个在8090
上侦听,或者让Apache使用两个不同的VirtualHost监听这两个端口?tomcat服务器位于。然而我