我有一个服务器server.example.com
,它通过ProxyPass
/ ProxyPassReverse
到8080在端口80上为Tomcat提供服务,在server.example.com:8001
的同一个方框上为Drupal网站提供服务。如果我明确地输入端口8001,Drupal网站的行为正常,但我需要通过server.example.com/blog
访问它,因此我为ProxyPass
创建了ProxyPassReverse
/ /blog http://server.example.com:8001
正确地为Drupal站点的初始页面提供服务,但是一旦Drupal主页上的表单被填写并提交,POST到/
,该站点就会更改为Tomcat站点,大概是因为/不是相对的邮件上的当前主持人:8001。如何让ProxyPass
/blog
保持持久,以便所有后续请求都保留在:8001 VirtualHost
(Drupal网站)中?
我尝试的一件事是使用mod_rewrite:
RewriteCond %{HTTP_REFERER} /^blog/.*$
RewriteRule (.*) %{HTTP_HOST}:8001/$1 [L,P,NC]
但就我所知,这根本没有任何作用。我希望,如果最初的请求是/ blog,那么引用者也是如此,我可以在:8001虚拟主机上保留请求。也许有人可以解释为什么这有缺陷。
答案 0 :(得分:1)
您很可能遇到的问题是Drupal返回的文档包含所有引用/
而不是/blog
的生成链接。 mod_rewrite
和proxypass
对文档的内容不执行任何操作 - 它们仅对请求执行操作(或者,对于请求 ProxyPassReverse,在诸如位置:返回内容中的标题之类的链接上。)
要使通常希望以/
安装的应用程序在不同的URL上运行,您需要:
(a)配置应用程序以了解正确的基本URL。许多应用程序都包含这样的设置,以便准确支持您所描述的情况。
(b)安装某种可以修改返回文档内容的过滤代理。对于Apache,mod_proxy_html就是这样做的。这本身包含在Apache 2.4中,但可能需要单独安装2.2。