1

我想在 yii 中使用自定义动态 seo 友好的 url。

我读了各种各样的文章,他们都说同样的话。

这是我到目前为止设法找到的,它不适合我的需要:

    'urlManager'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

或者

array(
     '<_c:(post|comment)>/<id:\d+>/<_a:(create|update|delete)>'=>'<_c>/<_a>',
     '<_c:(post|comment)>/<id:\d+>'=>'<_c>/view',
     '<_c:(post|comment)>s/*'=>'<_c>/list',
)

我不需要像这样的网址:domain.com/a/b/c/d

我需要:domain.com/here-goes-the-article-title-ACTION-ID

我需要一个可以识别文章标题的表达式。

这就是我的一个网址的样子:http://www.linkbook.ro/concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012-detailsU-2-882。 html

其中 concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012 是文章标题

detailsU是动作

2 是数据库ID

882是文章ID

4

1 回答 1

3

让我将我的评论表述为答案。你仍然需要自己实现一些东西,但这应该让你开始:

class MyRule extends CBaseUrlRule
{
  public function parseUrl($oManager, $oRequest, $sPathInfo, $sRawPathInfo)
  {
    // Extract database Id and article Id from $sPathInfo and perhaps put it in $_REQUEST
    if ("url isn't SEO thingy")
      return FALSE:        
    return 'articles/index';
  }

  public function createUrl($oManager, $sRoute, $aParameters, $sAmpersand)
  {
     if ("i have an SEO item to show")
       return "/however you want to assemble your URL"; 
     return FALSE; 
  }
}

上面的示例假设您通过文章控制器(操作索引)路由所有内容。

添加到配置是将以下内容添加到您的规则中:

'urlManager'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            array('class' => 'MyRule'),
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
于 2012-07-24T08:10:31.667 回答