2017-09-05 49 views
0

我使用cakephp 2.0的應用程序...
一切都很好,但我得到一些自定義URL或SEO友好的URL的問題。如何使用cakephp國際化與自定義URL和擴展

下面是我使用

Router::parseExtensions('html', 'rss', 'xml','json'); 
    Router::connect('/:language/:controller/:action/*',array(),array('language' => 'eng|chi')); 
    Router::connect('/', array('controller' => 'homes', 'action' => 'index'),array('language' => 'eng|chi'));  
    Router::connect('/backend/*', array('controller' => 'users', 'action' => 'login', 'lab' => true)); 
    Router::connect('/about-us/*', array('controller' => 'homes', 'action' => 'about_us')); 
    Router::connect('/contact/*', array('controller' => 'homes', 'action' => 'contact')); 
    Router::connect('/:slug', array('controller' => 'homes', 'action' => 'page'), array('pass' => array('slug'), 'slug'=>'[a-zA-Z0-9-]*')); 

這裏路由規則「關於美」,「接觸我們」和第3和主要的一個是「:彈頭」(動態)

兩個問題:

  1. 當我試圖改變語言,輸入的網址顯示lang/controller/actionabc.com/eng/homes/about_us),而不是abc.com/eng/about-us.htmlabc.com/chi/about-us.html
  2. 其他動態網址例如。 abc.com/page-1.htmlabc.com/page-2.htmlabc.com/page-3.html等等......如何使用abc.com/lang/slug.htmlabc.com/eng/page-1.htmlabc.com/chi/page-1.html

爲此,我現在用的是

Router::connect('/:slug', array('controller' => 'homes', 'action' => 'page'), array('pass' => array('slug'), 'slug'=>'[a-zA-Z0-9-]*')) 

規則。

回答

1

當我試圖改變語言,輸入的網址顯示的lang /控制器/動作(abc.com/eng/homes/about_us)

中的問題路線定義有這首:

這條路線將匹配具有 engchi傳遞給它的語言,所有的URL都有一個控制器和一個動作這條路線會一直匹配任何網址 -
Router::connect(
    '/:language/:controller/:action/*', 
    array(), 
    array('language' => 'eng|chi') 
); 

路線在聲明它們的順序進行測試。

,而不是abc.com/eng/about-us.html或abc.com/chi/about-us.html

如果有需要爲/:lang/:slug路由匹配 - 則有必須是與該模式相匹配的路線 - 目前還沒有。

其他動態URL如abc.com/page-1.html,abc.com/page-2.html,abc.com/page-3.html等等......如何使用ABC。 com/lang/slug with .html(abc.com/eng/page-1.html或abc.com/chi/page-1.html)

我不完全理解問題,但答案可能要確保所有路由都存在前綴,並且在沒有前綴的路由之前定義。例如: -

Router::parseExtensions('html', 'rss', 'xml','json'); 

// Define Chinese language routes first as they have a prefix 
Router::connect('/chi/', ['controller' => 'homes', 'action' => 'index'],['language' => 'chi']); 
Router::connect('/chi/backend/*', ['controller' => 'users', 'action' => 'login', 'lab' => true],['language' => 'chi']); 
Router::connect('/chi/about-us/*', ['controller' => 'homes', 'action' => 'about_us'],['language' => 'chi']); 
Router::connect('/chi/contact/*', ['controller' => 'homes', 'action' => 'contact'],['language' => 'chi']); 
Router::connect('/chi/:slug', ['controller' => 'homes', 'action' => 'page'], ['pass' => ['slug'], 'slug'=>'[a-zA-Z0-9-]*'],['language' => 'chi']); 
Router::connect('/chi/:controller/:action/*',[],['language' => 'chi']); 

// Define English language routes last as they don't have a prefix 
Router::connect('/', ['controller' => 'homes', 'action' => 'index'],['language' => 'eng']); 
Router::connect('/backend/*', ['controller' => 'users', 'action' => 'login', 'lab' => true],['language' => 'eng']); 
Router::connect('/about-us/*', ['controller' => 'homes', 'action' => 'about_us'],['language' => 'eng']); 
Router::connect('/contact/*', ['controller' => 'homes', 'action' => 'contact'],['language' => 'eng']); 
Router::connect('/:slug', ['controller' => 'homes', 'action' => 'page'], ['pass' => ['slug'], 'slug'=>'[a-zA-Z0-9-]*'],['language' => 'eng']); 
Router::connect('/:controller/:action/*',[],['language' => 'eng']); 

這樣所有路由可以明確地解析,併產生明確過 - 假設生成一個URL時,語言會通過; persist parameter可以幫助。