【问题标题】:In CakePHP, is it possible to have internal and external routes?在 CakePHP 中,是否可以有内部和外部路由?
【发布时间】:2009-05-12 23:16:55
【问题描述】:

Facebook 应用程序托管在我的服务器上,例如 http://server.com/projects/fbapp/,但只能在 Facebook 中查看,例如 http://apps.facebook.com/fbapp/

使用 CakePHP 会带来一个问题 - 路由应该以“/project/fbapp”为前缀还是只是“fbapp”?

这是一个问题,因为路由不仅用于路由入站请求,还用于生成链接(和表单操作等)。

作为一个组合,我现在每条路线都有两条路线说明:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('projects/fbapp/pages/*', array('controller' => 'pages', 'action' => 'display'));

第一个不需要前缀,因为我在 bootstrap.php 中包含了一行:

Configure::write('App.base', '/fbapp');

在反向路由操作期间启动。

我的问题是是否有更优雅的方式来做到这一点?这看起来很丑,我敢肯定它不是很蛋糕。

【问题讨论】:

  • 我知道这有点糟糕的答案,但是运行 server.com:8080/fbapp 怎么样?
  • 我确实想到了!我认为它与我当前的解决方案一样笨拙/有效。我想这是学术性的,但我真的想要一个优雅的解决方案。
  • 对来自 facebook 的流量进行 (apache) 重写不是最优雅的解决方案吗?你的内部机器只需要处理一个路径,如果你想在以后将应用程序与另一个服务/平台集成,你只需要添加另一个重写规则而不是弄乱应用程序本身。
  • 这听起来确实是一条有希望的途径。我猜它会在 .htaccess 文件中“发生”,所以它是可移植的。和蛋糕。想把它变成(赏金候选人)答案吗?
  • 你不需要在 Apache 和 CakePHP 中做任何事情;你的配置是错误的。此外,在 Apache 中执行此操作意味着您与该服务器绑定,如果您想更改为任何其他服务器,则不会。正确设置 CakePHP 配置是正确的方法。看我的回答。

标签: facebook cakephp routing


【解决方案1】:

您根本不需要做任何事情! Cake 会为您处理基本 URL,因此您不需要复制路由,也不需要处理基本 URL。您需要做的是路由您的相对 URL,而不是使用 projects/fbapp/ 或您想要处理的任何前缀:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

这就是我处理应用程序中所有请求的方式,我将其部署在http://www.example.com 下,而在本地我将其部署在http://localhost/workspace/example.com/trunk/deploy 下。它在两种环境中都非常有效。

【讨论】:

    【解决方案2】:

    应要求交叉发表我的评论:

    对来自 facebook 的流量进行 (apache) 重写难道不是最优雅的解决方案吗?您的内部机器只需要处理一个路径,如果您想在以后将应用程序与另一个服务/平台集成,您只需添加另一个重写规则,而不是弄乱应用程序本身。

    【讨论】:

    • 你不需要这个。不,它不会是最优雅的解决方案,因为如果您不使用 Apache,它将无法工作。事实上,你不需要做任何事情;看看我的回答。
    【解决方案3】:

    我会根据Ask Apache 和我在一些旧项目中制定的一些规则来试一试。我认为把它放在你的 webroot 中的 .htaccess 文件中就可以了(但这是一个猜测)。

    Options +FollowSymLinks
    RewriteEngine on
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/projects/fbapp/pages.*
    RewriteRule ^/projects/fbapp/pages/(*)$ /pages/$1 [L]
    

    上面应该(如果我做得对的话)将任何匹配http://server.com/projects/fbapp/pages/* 的请求重写为http://server.com/pages/* 即http://server.com/projects/fbapp/pages/foo => http://server.com/pages/foo

    编辑在 Apache 部分找到 this posted

    【讨论】:

    • 您不需要这个,而且,如果您不使用 Apache,它将无法工作。事实上,你不需要做任何事情;看看我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多