2014-01-20 36 views
0

我有一台服务器server.example.com,它通过ProxyPass/ProxyPassReverse到8080在端口80上服务于Tomcat,在server.example.com:8001的同一个盒子上有一个Drupal站点。如果我在港口进入8001明确,Drupal站点的行为不当,但我需要,使之获得通过server.example.com/blog,所以我为/blog http://server.example.com:8001这对于Drupal站点正常供应的初始页面创建一个ProxyPass/ProxyPassReverse,但一旦上了形式Drupal的的主页是填写并提交,哪些职位到/,该网站更改为Tomcat的网站,大概是因为/相对于在岗当前主机是不是:8001。我怎样才能获得ProxyPass/blog保持持久的,因此,所有后续请求保持:8001 VirtualHost(Drupal站点)内?Apache 2.2 Mod Proxy ProxyPass行为

有一件事我试图用mod_rewrite的:

RewriteCond %{HTTP_REFERER} /^blog/.*$ 
RewriteRule (.*) %{HTTP_HOST}:8001/$1 [L,P,NC] 

但是,这确实什么都没有,据我可以告诉。我希望如果最初的请求是针对/博客,那么推荐人也是如此,我可以在8001虚拟主机上保留请求。也许有人可以解释为什么这是有缺陷的。

回答

1

您很可能遇到的问题是,Drupal返回的文档包含生成的链接,它们全部引用/而不是/blogmod_rewriteproxypass不对文档内容做任何事 - 它们仅对请求(或者在ProxyPassReverse的情况下,在诸如返回内容中的位置:标头的链接上)采取行动。

为了让这个通常希望为/在不同的URL操作要安装的应用程序,你需要要么:

(一)配置应用程序要注意适当的基本网址。许多应用程序都包含这样的设置,以便准确支持您所描述的情况。

(b)安装某种过滤代理的可修改退回文档的内容。对于Apache来说,mod_proxy_html就是为了做到这一点。这包含在Apache 2.4本地,但可能需要单独安装2.2。

+0

这听起来很正确,其实我发现在settings.php配置文件,该文件确实在A)部分的$ BASE_URL设置,但我认为更需要做的事情。现在我得到一个白色的index.php页面,这让我觉得包含没有被发现。我很可能会将你的标记标记为已接受,但首先要鼓励更多答案。感谢您的意见,我认为这非常准确。 – GL2014