CakePHP 中的反向代理?

发布于 2024-08-09 09:50:59 字数 691 浏览 11 评论 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 使用它自己的来自 paths.php 和其他来源的重定向逻辑,它似乎会覆盖任何代理设置,因此任何对我的服务器上的“/community”的调用遵循寻找名为 CommunityController 的控制器的默认路径。

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

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

I've got a CakePHP application, and the following directives in my httpd.conf

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

Without CakePHP this works fine - but because CakePHP is using it's own redirection logic from routes.php and other sources, it seems to override any proxy settings, so any call to "/community" on my server follows the default pathway of looking for a Controller called CommunityController.

My issue here is that I want to have one server that serves muliple applications, but keep it seamless to the user - so a complete PHPBB application can for instance run within the "/forum" directory as if it were a controller in CakePHP.

Has anyone done this before, and can it be done? Why does mod_rewrite and/or the routes.php file override my mod_proxy directives??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤寂小茶 2024-08-16 09:50:59

也许您可以使用 mod_rewrite 来创建 RewriteRule,而不是使用 mod_proxy 指令,带有 [P](代理)标志和 [L](最后一条规则)标志。

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

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

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

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

停止
此处重写过程并不适用
任何更多的重写规则。这
对应Perl的最后一个命令
或者C中的break命令。使用这个
标志以防止当前
重写 URL 免遭重写
进一步通过以下规则。为了
例如,用它来重写
真实 URL 的根路径 URL ('/'),
例如,“/e/www/”。

Perhaps instead of using mod_proxy, you could use mod_rewrite to create a RewriteRule directive with the [P] (proxy) flag in conjunction with the [L] (last rule) flag.

'proxy|P' (force proxy):

This flag
forces the substitution part to be
internally sent as a proxy request and
immediately (rewrite processing stops
here) put through the proxy module.
You must make sure that the
substitution string is a valid URI
(typically starting with
http://hostname) which can be handled
by the Apache proxy module. If not,
you will get an error from the proxy
module. Use this flag to achieve a
more powerful implementation of the
ProxyPass directive, to map remote
content into the namespace of the
local server.

Note: mod_proxy must be enabled in
order to use this flag.

'last|L' (last rule):

Stop the
rewriting process here and don't apply
any more rewrite rules. This
corresponds to the Perl last command
or the break command in C. Use this
flag to prevent the currently
rewritten URL from being rewritten
further by following rules. For
example, use it to rewrite the
root-path URL ('/') to a real one,
e.g., '/e/www/'.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文