在CakePHP中为PagesController路由搜索引擎友好的URL

在CakePHP中为PagesController路由搜索引擎友好的URL,php,cakephp,url-routing,Php,Cakephp,Url Routing,我正在尝试为pages controller创建搜索引擎友好的URL,即/about,而不是/pages/about 我已尝试设置以下路由(在routes.php的底部): 及 两者都正确匹配/about,/support,等等。但是,当我有一对操作/方法时失败了。例如,/contact应该路由到PagesController->contact()。但是,上面的命令将其路由到PagesController->display() 必须有一种方法来实现这一点,而不必为每一页制定特定的路线。如何创建一

我正在尝试为pages controller创建搜索引擎友好的URL,即
/about
,而不是
/pages/about

我已尝试设置以下路由(在routes.php的底部):

两者都正确匹配
/about
/support
,等等。但是,当我有一对操作/方法时失败了。例如,
/contact
应该路由到
PagesController->contact()
。但是,上面的命令将其路由到
PagesController->display()

必须有一种方法来实现这一点,而不必为每一页制定特定的路线。如何创建一条或一组符合以下条件的管线:

  • 模拟的默认路由行为 页面控制器。那就是路线 显示()的步骤,除非操作/方法 这对存在
  • 这样做与搜索引擎友好的网址。它来自根
    /
    而不是
    /pages
  • 演示
    Router::connect()
    Html->link()

我查看了中的示例,并查看了其他问题,如。似乎没有任何内容符合上述规范。

您需要为contact方法调用创建第二条路由,并将其放在更通用的规则之前,以匹配“在/pages之后的所有内容[a-z]”。在你的规则之前尝试一下:

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

始终记住,路线的顺序很重要。规则越通用,它就越匹配。因此,将更具体的规则放在更通用的规则之前。

/*
?除了PagesController之外,您还在应用程序中使用其他控制器吗?那么,cake如何知道
/xyz
是否应该调用
XYZController->index()
,而不是
PagesController->xyz()
?这就是为什么你必须明确列出页面,不是吗?@webbiedave,我知道你要去哪里。但是必须有某种方法来完成我上面概述的路线。很明显,我是说,
/*
不是答案。谢谢,但您没有看到规范。我知道我可以手动制定规则,以映射到每个页面。我试图用动态规则来避免这种情况。
Router::connect('/:page', array('controller' => 'pages',
  'action' => 'display'), array('pass' => array('page'), 'page' => '[a-z]+'));
Router::connect('/contact', array('controller' => 'pages', 'action' => 'contact'));