【发布时间】:2013-10-09 16:00:31
【问题描述】:
我该怎么做
domain.com/api/somecontroller/someaction
和
domain.com/somecontroller/someaction
指向同一个控制器动作:
class somecontroller {
function someaction() {
}
}
注意:我不想只重新路由一个操作。但我想将 domain.com/api/* 的所有路由重新路由到不带“api”前缀的相应 URL。
例如:
domain.com/api/controller -> domain.com/controller
domain.com/api/controller/action -> domain.com/controller/action
domain.com/api/controller/action/param -> domain.com/controller/action/param
domain.com/api/controller/action?key=val -> domain.com/controller/action?key=val
我尝试在 routes.php 中添加以下内容:
Router::connect('/api', array('controller'=>'index', 'action'=>'index'));
Router::connect('/api/:controller', array('action'=>'index'));
Router::connect('/api/:controller/:action');
Router::connect('/api/:controller/:action.:ext');
它适用于定义的规则。但我似乎并未涵盖所有场景。就像您使用 URL 参数或插件和其他高级 URL 时失败一样。
有没有更简单的方法来完成我想要的任务?
【问题讨论】:
-
“有没有更简单的方法来完成我想要的任务?” 是的,它叫做 mod rewrite。
-
您不需要 mod_rewrite,蛋糕路由系统会处理一切。您可以使用通配符和占位符,请参阅下面的答案。
-
无论你是否需要,mod rewrite 仍然是处理这种情况的更好、更有效的方法。只是说...