Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows mod_rewrite返回找到的302_Windows_Mod Rewrite_Apache2_Apache Config - Fatal编程技术网

Windows mod_rewrite返回找到的302

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

我有一个Apache2.2,我正在使用mod_rewrite。我的目标是转发来自 到所以我有一个简单的规则

重写规则http://localhost:8090/BB

我的问题是客户端收到“302已找到”。我希望规则会被改写 将流量从AA转发到BB,最后BB将向我的客户发送响应


我的配置有问题吗?

有关详细信息,请参阅文档

您要做的是将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服务器位于。然而我