没有redirect的Apache转发(应用程序不会遵循redirect)

最近我们不得不将/任务移动到/ public / task,我想configurationApache来redirect。

但是,使用mod_rewrite,尽pipe它在浏览器中工作,似乎打破了应用程序的API调用上述位置。 会发生什么情况是应用程序返回一个页面,并显示该页面已移动,但该应用程序不遵循redirect。

那么,有没有办法简单地转发任何stream量/任务到/公共/任务没有“redirect”,即返回一个redirect状态代码?

编辑:这里有一点信息。 我发现一个简单的testing来澄清我正在尝试修复。 这是需要转发的URLpath:

https://mydomain.com/task 

需要去:

 https://mydomain.com/public/task 

如果我对原始域使用curl,它只是返回一个redirect页面通知。 如果我添加-L标志,它告诉curl跟随redirect,然后成功地跟随redirect。

我假设在应用程序中(我没有访问权限)发生了非常类似的事情,它调用了/任务​​URLpath。 由于我不能修改应用程序,使其遵循redirect,我正在寻找一个解决scheme,我可以在Apache中实现。

编辑2:谢谢大家为你input。 ryanmbuild议在重写中使用[P]标志。 以下是我所做的一切:

Apache显然有三种方式将访问者转发或redirect到一个URL:别名,代理和重写。

别名似乎是最明显的解决scheme,因为它默默地将访客转移到新的指定位置。 不幸的是,这并不适用于我,因为别名需要指定实际文件系统上的新位置,并与Jboss,该位置在每次重新部署/重新启动时更改。

使用ProxyPass似乎也能工作,而且有可能,但是我configuration它的每一个方法,curl都会返回一个空的结果,而且看起来没有任何事情发生。 这是我用过的代理命令无济于事:

 ProxyPass /task http://localhost:8080/public/task 

最后,redirect(用[P]标志)解决了这个问题。 我最初的redirect看起来像这样:

 RewriteRule ^/task/(.*)$ public/task/$1 [R,L] 

使用[R],Apache将redirect头返回给客户端,在任何浏览器中都能正常工作,但却导致像curl这样的应用程序停止了一个告诉他们redirect的页面。 curl需要-L标志,然后按照redirect。

最后,使用ProxyPass和Rewrite的组合,我能够使其工作。 我在ryanm的build议中使用了这个[P]标志,curl现在会在redirect之后,而不必使用-L标志。 我最后的指示是这样的:

 RewriteRule ^/task/(.*)$ http://localhost:8080/public/task/$1 [P] 

再次感谢大家的帮助!

我已经成功地使用了mod_alias而没有给客户端一个redirect; 这是从浏览器请求的URL /请求/到内部目录/ opt / myapplication。

但是,如果该解决scheme由于某种原因而不起作用,您是否考虑过mod_rewrite代理标志或代理设置? 这是同一台服务器,但如果别名不起作用,代理可能会工作到本地主机。

不知道在服务器上运行的是什么types的应用程序,你可以用Alias来完成。 就像是:

 Alias /task /var/www/.../public/task 

我假设你在某种types的* nix服务器上。

我可以想出两种方法来解决这个问题。

1) 符号链接两个目录。 ln -s /path/to/domain/public/task /path/to/domain/task这不是严格的Apache答案,但它可能比Apache解决scheme执行得更快。 您需要使用Options FollowSymLinks来进行域的configuration。

2) Apache别名这是由chultz发布的答案,所以如果你select这个解决scheme。 他先到那里 你将需要这个mod_alias。