我在CakePHP网站上设置了以下路线
Router::connect('/:language/blog', array('controller' => 'posts', 'action' => 'index'), array('language' => 'en', 'persist'=>array('language')));
Router::connect('/:language/blogue', array('controller' => 'posts', 'action' => 'index'), array('language' => 'fr', 'persist'=>array('language')));
Router::connect('/:language/blog/:post_id', array('controller' => 'posts', 'action' => 'view'), array('language' => 'en', 'persist'=>array('language', 'post_id')));
Router::connect('/:language/blog/:post_id/:slug', array('controller' => 'posts', 'action' => 'view'), array('language' => 'en', 'persist'=>array('language', 'post_id', 'slug')));
Router::connect('/:language/blogue/:post_id', array('controller' => 'posts', 'action' => 'view'), array('language' => 'fr', 'persist'=>array('language', 'post_id')));
Router::connect('/:language/blogue/:post_id/:slug', array('controller' => 'posts', 'action' => 'view'), array('language' => 'fr', 'persist'=>array('language', 'post_id', 'slug')));
这为我提供了/en/blog
或/fr/blogue
这样的网址。有没有办法可以删除该网址,并将其显示在/blog
或/blogue
中(但是仍然坚持语言参数)?
如果不可能,我可能会将语言保留在网址中,但下一步非常重要。我的<head>
echo '<link rel="canonical" href="'. Router::url($this->request->here true) .'">';
我希望在其中包含SEO的规范网址。我希望规范网址只是/blog/123
,但它始终显示为当前网址的所有内容。 /en/blog/123/article-slug
或/fr/blogue/123/article-slug
。有谁知道我怎么能得到理想的行为? (附带问题:从规范网址中删除slug部分是否会破坏使用友好URL进行SEO的目的?)
答案 0 :(得分:0)
我通过改变路线来解决这个问题
Router::connect('/blog', array('controller' => 'posts', 'action' => 'index', 'language'=>'en'), array('persist'=>array('language')));
Router::connect('/blog/:post_id', array('controller' => 'posts', 'action' => 'view', 'language'=>'en'), array('persist'=>array('language', 'post_id')));
Router::connect('/blog/:post_id/:slug', array('controller' => 'posts', 'action' => 'view', 'language'=>'en'), array('persist'=>array('language', 'post_id', 'slug')));
Router::connect('/blogue', array('controller' => 'posts', 'action' => 'index', 'language'=>'fr'), array('persist'=>array('language')));
Router::connect('/blogue/:post_id', array('controller' => 'posts', 'action' => 'view', 'language'=>'fr'), array('persist'=>array('language', 'post_id')));
Router::connect('/blogue/:post_id/:slug', array('controller' => 'posts', 'action' => 'view', 'language'=>'fr'), array('persist'=>array('language', 'post_id', 'slug')));
并在我的帖子控制器中查看了我添加的操作
$this->set('canonical', Router::url(array('controller'=>'posts', 'action'=>'view', 'post_id'=>$post['Post']['id'], 'language'=>'en')));
在我的布局文件的<head>
部分,我添加了
if (!isset($canonical)) {
$canonical = $this->request->here;
}
if ($canonical !== false) {
echo '<link rel="canonical" href="'. Router::url($canonical, true) .'">';
}
答案 1 :(得分:-1)
如何删除:language
并为每个设置?:
Router::connect('/blogue/:post_id/:slug',
array('controller' => 'posts', 'action' => 'view'),
array('language' => 'fr', 'persist'=>array('post_id', 'slug')));
Router::connect('/blog/:post_id/:slug',
array('controller' => 'posts', 'action' => 'view'),
array('language' => 'en', 'persist'=>array('post_id', 'slug')));