Apache反向代理 - 停止尾随斜杠重定向

时间:2013-02-13 03:04:08

标签: apache mod-rewrite webserver apache2 mod-proxy

我正在将运行静态HTML的站点在Sun One(iPlanet)6.1上迁移到Apache上的Drupal站点。

要求旧服务器保持运行并提供旧内容,直到可以将其移动到Drupal中。我认为最简单的方法是在Apache中有一些指向这个旧内容的反向代理条目。

以下是我在服务器上下文级别的httpd.conf中所拥有的内容。

RewriteEngine On
RewriteLogLevel 9
RewriteLog "/var/log/httpd/rewrite_log"
RewriteRule offices/ist/?(.*)$ http://oldserver/offices/ist/$1 [P]
<Location /offices/ist/>
ProxyPassReverse /
</Location>

当我提出这样的请求时,一切正常。

http://newserver/offices/ist/somedir/

如果我发出相同的请求(没有斜杠),则302使用旧服务器的名称重定向。

http://newserver/offices/ist/somedir    =>  Redirect to http://oldserver/offices/ist/somedir/

Apache在发送回客户端之前不应该捕获此重定向吗?

我可以让Apache在将这些请求发送到旧服务器之前重写这些请求吗?

2 个答案:

答案 0 :(得分:0)

我不确定,但可能(.*)太贪心了。

我查看了Apache mod_rewrite,但我没有找到?的示例。

我建议不要使用/?或与Apache mod_proxy示例类似的内容进行尝试。

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar 

答案 1 :(得分:0)

问题是Sun One重定向标头的结果 将Apache代理到另一台Apache服务器,问题就消失了。 Apache能够捕获后端Apache服务器发送到客户端之前发送的重定向。