我有一个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
指令?
答案 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 /'。