在CakePHP中,是否可以拥有内部和外部路由?

时间:2009-05-12 23:16:55

标签: facebook cakephp routing

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

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

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

作为一个kludge,我现在每条路线有两条路由指令:

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');

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

我的问题是,是否有更优雅的方式来做到这一点?这看起来非常难看,我确信它不是很好吃。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我将根据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

答案 2 :(得分: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下拥有它。它在两种环境中都像是一种魅力。