2014-07-22 60 views
0

我已經建立了我的CakePHP的網站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'))); 

這使我的URL像/en/blog/fr/blogue以下途徑有沒有辦法從出現在URL中刪除語言和它只是顯示/blog/blogue(但仍然堅持語言參數)?

如果這是不可能的,我可以住在保持url中的語言,但接下來的這一點非常重要。我有這樣的事情在我<head>

echo '<link rel="canonical" href="'. Router::url($this->request->here true) .'">'; 

,我想包括SEO規範網址。我希望規範網址只是/blog/123,但它總是顯示爲當前網址即ie。 /en/blog/123/article-slug/fr/blogue/123/article-slug。有誰知道我怎麼能得到想要的行爲? (方問題:?不取出塞部分從規範網址打敗使用友好的URL搜索引擎優化的目的)

+0

閱讀文章:http://bakery.cakephp.org/articles/kicaj/2013/01/27/internationalization_with_static_and_dynamic_content_routing_and_switching或http://博客.kdev.pl/2013/02/internacjonalizacja-statyczna-i.html – kicaj

回答

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) .'">'; 
} 
+0

請考慮這一點「如果您有多個語言版本的URL,則每個語言頁面都必須標識所有語言版本,包括其自身。」 https://support.google.com/webmasters/answer/189077 – ozanmuyes

-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'))); 
+0

如果我刪除:語言部分,那麼它根本不會做任何語言切換,並且與反向路由不匹配(​​我的鏈接自動包含語言param) –