0

我有一个 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。

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

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

4

1 回答 1

1

也许您可以不使用 mod_proxy,而是使用 mod_rewrite 来创建一个带有(proxy) 标志和(last rule) 标志的RewriteRule指令。[P][L]

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

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

注意:必须启用 mod_proxy 才能使用此标志。

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

在此处停止重写过程,不再应用任何重写规则。这对应于 Perl 的 last 命令或 C 中的 break 命令。使用此标志来防止当前重写的 URL 被以下规则进一步重写。例如,使用它将根路径 URL ('/') 重写为真实的 URL,例如,'/e/www/'。

于 2009-10-28T21:01:35.383 回答