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');
在反向路由操作期间启动。
我的问题是,是否有更优雅的方式来做到这一点?这看起来非常难看,我确信它不是很好吃。
答案 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
下拥有它。它在两种环境中都像是一种魅力。