在CakePHP中我想做特定的路由规则(主要是出于美容和搜索引擎优化的原因)。
例如,我在代码中做的是这样的:
Router::connect('/c/:uni.html', array('controller' => 'contents', 'action'=>'index'));
现在如果有人打电话
MY_SITE / anyController / anyAction
我不希望CakePHP去那里,即使这个Controller确实存在(当然还有行动......)
示例:
class AnyController extends AppController {
var $helper = array('Html');
/**
* landingpage
*/
private function anyAction() {
//this action must not be called by /anyController/anyAction
//but only by my own defined route
}
}
答案 0 :(得分:2)
重复内容的解决方案通常是'规范链接'标记,正如@ dogmatic69指出的那样。
在所有页面上放置这样的标签,您可以充分利用这两个方面:保留Cake的默认路由,但将搜索引擎指向“正确”的URL。
这是您在视图中插入规范链接标记的方式:
echo $this->Html->meta(
'canonical',
'http://example.com',
array(
'rel' => 'canonical',
'type' => null,
'title' => null,
'inline' => false
)
);
您可以使用Cake的http://example.com
函数代替url()
,它可以将操作和控制器作为参数,并始终返回您的自定义路径(这称为reverse routing)。 / p>
$this->Html->url(array(
'controller' => 'foo',
'action' => 'bar'
));
总而言之,这应该给你你想要的东西:
echo $this->Html->meta(
'canonical',
$this->Html->url(array(
'controller' => $this->request->params['controller'],
'action' => $this->request->params['action']
)),
array(
'rel' => 'canonical',
'type' => null,
'title' => null,
'inline' => false
)
);
这会将当前视图的控制器/操作的第一个(您首选的)路由放入规范链接标记。
答案 1 :(得分:1)
创建一条捕获所有内容的路线
// your other routes
Router::connect('/*', array('contoler' => '...);
正如评论中所指出的,这不是一个好主意。它确实有用。