ブログアプリケーションのさまざまなページにリンクするURLは、現在、見栄えが悪いです。たとえば、投稿を表示するページのURLは次のようになります。
/index.php?r=post/show&id=1&title=A+Test+Post
このセクションでは、これらのURLを美化してSEOフレンドリーにする方法について説明します。私たちの目標は、アプリケーションで次のURLを使用できるようにすることです。
/index.php/posts/yii
: タグyii
を持つ投稿のリストを表示するページにつながります。/index.php/post/2/A+Test+Post
: IDが2でタイトルがA Test Post
である投稿の詳細を表示するページにつながります。/index.php/post/update?id=1
: IDが1の投稿の更新を許可するページにつながります。2番目のURL形式では、URLに投稿タイトルを含めていることに注意してください。これは主にURLをSEOフレンドリーにするためです。検索エンジンは、インデックス作成時にURLで見つかった単語も尊重すると言われています。
目標を達成するために、アプリケーション構成を次のように変更します。
return array(
......
'components'=>array(
......
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'post/<id:\d+>/<title:.*?>'=>'post/view',
'posts/<tag:.*?>'=>'post/index',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
),
);
上記では、urlManager
コンポーネントのurlFormat
プロパティをpath
に設定し、一連のrules
を追加することで設定しています。
ルールは、urlManager
が目的の形式でURLを解析および作成するために使用されます。たとえば、2番目のルールは、URL/index.php/posts/yii
がリクエストされた場合、urlManager
コンポーネントがリクエストをルートpost/index
にディスパッチし、値がyii
のtag
GETパラメータを生成する必要があることを示しています。一方、ルートpost/index
とパラメータtag
でURLを作成する場合、urlManager
コンポーネントもこのルールを使用して、目的のURL/index.php/posts/yii
を生成します。このため、urlManager
は双方向のURLマネージャーであると言います。
urlManager
コンポーネントは、URL内のindex.php
を非表示にしたり、URLに.html
のようなサフィックスを追加するなど、URLをさらに美化できます。アプリケーション構成でurlManager
のさまざまなプロパティを設定することで、これらの機能を簡単に取得できます。詳細については、ガイドを参照してください。
誤字脱字を見つけましたか、またはこのページを改善する必要があると思いますか?
githubで編集 !
投稿タイトル
"/post/id/title"スキーマを使用するには、createUrlメソッドに必要な変数を渡していることを確認してください。関連付けられたリンクで次のコードを使用することでこれを行うことができます
Yii::app()->createUrl('post/view', array( 'id'=>$this->id, 'title'=>$this->title, ));
URLスキーマを管理するためのインテリジェントで、よりクリーンで、保守しやすい方法は、カスタムURLスキーマを必要とする各モデルにgetURL()メソッドを定義することです。たとえば、次のようになります。
public function getUrl() { return Yii::app()->createUrl('post/view', array( 'id'=>$this->id, 'title'=>$this->title, )); }
ビューでリンクを取得して表示するには、getUrlメソッド(例:this->UrlまたはMyModel::Url)のみを使用します。
また、真にSEOフレンドリーなURLが必要な場合は、'urlManager'と一緒にapacheのURL REWRITEを使用する必要があります。
コメントするには、サインアップまたはログインしてください。