使用Apache httpdredirect上下文path?

我想代理http://localhost:1006/http://example.com/public/到外面的世界。 这是我的configuration:

 RewriteEngine On # Append a slash if necessary RewriteRule ^/public$ public/ [R,L] # Request headers: Replace http://localhost:1006/ with http://example.com/public/ ProxyPass /public/ http://localhost:1006/ # Response headers: Replace http://example.com/ with http://example.com/public/ ProxyPassReverse /public/ http://example.com/ ProxyPassReverseCookiePath / /public/ <Location /public> Require all granted </Location> 

这适用于重写头文件,但服务器仍然认为它的上下文path是/而不是/public/所以当它构造的URLembedded到JSON他们是不正确的。 Httpd只重写头文件,而不是JSON文件,所以它没有做任何事情。

我不希望httpd重写JSON(我读的过程是不可靠的)。 我注意到由httpd向服务器发送的Host头包含外部主机名,它使服务器能够更正URL的那部分。 是否有一些其他的头可以设置哪些会指示服务器使用不同的上下文path?

这意味着, 有什么我可以做的httpd这将改变服务器的上下文path,而不直接改变服务器的configuration/代码?

简答:不,不是。 通常情况下,您的后端应用程序需要configuration自己的根URL,以便它可以生成适当的链接。 如果您的后端应用程序托pipe在像Tomcat之类的东西中,那么只需将其安装在相同的相对path中即可(例如,您可以从example.com/public/localhost:1006/public/ )进行代理) 。

你可以采取反向重写输出的方法,但让后端应用程序认为它存在于/ public中会容易得多,因为如果你重写的话,你将会玩弄一个痣,并为你的未来的未来重写内容path。