在CakePHP中为PagesController路由搜索引擎友好的URL
我正在尝试为pages controller创建搜索引擎友好的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() 必须有一种方法来实现这一点,而不必为每一页制定特定的路线。如何创建一
/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'));