CakePHP中的反向代理?

时间:2009-10-28 19:15:57

标签: apache cakephp reverse-proxy mod-proxy

我有一个CakePHP应用程序,以及httpd.conf中的以下指令

ProxyRequests off
ProxyPass /forum/ http://somesite.com/phpbb3
ProxyPass /gallery/ http://someothersite.com/gallery3
<Location /forum/>
        ProxyPassReverse /
</Location>
<Location /gallery/>
        ProxyPassReverse /
</Location>

没有CakePHP,这可以正常工作 - 但是因为CakePHP正在使用来自routes.php和其他来源的自己的重定向逻辑,它似乎会覆盖任何代理设置,因此我服务器上对“/ community”的任何调用都遵循默认路径寻找名为CommunityController的Controller。

我的问题是我希望有一台服务器可以为多个应用程序提供服务,但是它可以让用户无缝连接 - 所以一个完整的PHPBB应用程序可以在“/ forum”目录中运行,就好像它是一个控制器一样CakePHP的。

之前有没有人这样做过,可以吗?为什么mod_rewrite和/或routes.php文件覆盖我的mod_proxy指令?

1 个答案:

答案 0 :(得分:1)

也许不使用mod_proxy,您可以使用mod_rewrite创建RewriteRule指令,并将[P](代理)标志与[L](最后一条规则)标志结合使用。

'代理| P'(强制代理):

  

这个标志   迫使替代部分   内部作为代理请求发送   立即(重写处理停止   这里)通过代理模块。   你必须确保   替换字符串是有效的URI   (通常以...开头   http://hostname)可以处理   由Apache代理模块。如果不,   您将从代理中收到错误   模块。使用此标志来实现   更强大的执行   ProxyPass指令,用于映射远程   内容进入命名空间   本地服务器。

     

注意:必须启用mod_proxy   为了使用这个标志。

'last | L'(最后一条规则):

  

停止   这里改写过程并不适用   更多重写规则。这个   对应于Perl最后一个命令   或者用C中的break命令。使用它   标志,以防止目前   重写的URL被重写   进一步遵守规则。对于   例如,用它来重写   根路径URL('/')到真实的,   例如,'/ e / www /'。