我想在yii中使用自定义动态seo友好网址。
我阅读了各种文章,他们都说了同样的话。
这是我迄今为止找到的,并不符合我的需要:
'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
我需要一个可以识别文章标题的表达式。
其中concurs-castiga-o-invitatie-de-trei-zile-de-festival-la-bestfest-2012是文章标题
detailsU是行动
2是数据库ID
882是文章ID
答案 0 :(得分: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>',