URL マネージャー ( protected/config/main.php ) で、に設定urlFormat
しますpath
(また、オプションで設定showScriptName
しfalse
ます (これにより、URL の index.php 部分が非表示になります))。
'urlManager' => array(
'urlFormat' => 'path',
'showScriptName'=>false,
次に、ルールで次のように設定できます。
catalogue/<category_url:.+>/<product_url:.+> => product/view,
したがって、これが行うことは、catalogue/electronics/ipodsのような構造でProductController actionViewにルーティングして要求することです。category_url
次に、次のように URL のとproduct_url
の部分にアクセスできます。
$_GET['category_url'];
$_GET['product_url'];
このルールがどのように機能するかというと、catalog という単語 (ドメイン名の直後) で始まり、その後に別の単語 ( category_url
) と別の単語 ( )が続く URL は、product_url
そのコントローラー/アクションに転送されます。
この例では、カテゴリと製品の前にカタログという単語が付いていることに気付くでしょう。明らかに、これを好きなものに置き換えるか、すべて一緒に除外することができます。私がそれを入れた理由は、次の URL を検討するためです。
http://mywebsite.com/site/about
URL の「カタログ」部分を省略し、ルールを次のように定義した場合:
<category_url:.+>/<product_url:.+> => product/view,
URL マネージャーは、URL のサイト部分をcategory_url
値として、about 部分をproduct_url
. これを防ぐには、URL のカタログ部分を指定するか、非カタログ ページのルールを定義します (つまり、site/aboutのルールを定義します) 。
ルールは上から順に解釈され、最初のルールのみが一致します。明らかに、必要な数の異なる URL 構造に必要な数のルールを追加できます。
これが正しい道に進むことを願っています。必要な質問や説明があればお気軽にコメントしてください