2017-09-05 5 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-]*')); 

を使用していますルートルールをされている「私たちは約-」、「接触-たち」と第三及び主なものは以下のとおりです(動的)「スラッグ」は

つ問題:私は、言語を変更しようとすると

  1. は、URLがlang/controller/actionabc.com/eng/homes/about_us)の代わりに、abc.com/eng/about-us.htmlまたはabc.com/chi/about-us.html
  2. を示していますその他の動的URLの場合は
  3. となります。このためabc.com/page-1.htmlabc.com/page-2.htmlabc.com/page-3.htmlように... .htmlabc.com/eng/page-1.htmlまたはabc.com/chi/page-1.html)でabc.com/lang/slugを使用する方法

私は

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

ルールを使用しています。

私は、言語を変更しようとすると、URLがLANG /コントローラ/アクションを見せている

答えて

1

(abc.com/eng/homes/about_us)

問題のルート定義は、これが最初に持っている:

すべてのURLがこのルートが常に一致するコントローラとアクションを持っているように、このルートは、言語 engまたはそれに渡された chiを持っている任意の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はそれを助けることができます。

関連する問題