链接博客应用程序各个页面的 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 的帖子的页面。请注意,在第二种 URL 格式中,我们在 URL 中包含了帖子标题。这主要是为了使 URL 对 SEO 友好。据说,搜索引擎在对 URL 进行索引时也可能会尊重 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>',
),
),
),
);
在上面,我们通过设置其 urlFormat
属性为 path
并添加一组 rules
来配置 urlManager 组件。
这些规则由 urlManager
用于解析和创建所需格式的 URL。例如,第二条规则说,如果请求 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,例如在 URL 中隐藏 index.php
,在 URL 中附加后缀(如 .html
)。我们可以通过在应用程序配置中配置 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,则需要使用 Apache 的 URL 重写以及 'urlManager'。
注册 或 登录 以进行评论。