Yii 中的动态 SEO 友好 URL
Posted
技术标签:
【中文标题】Yii 中的动态 SEO 友好 URL【英文标题】:Dynamic SEO Friendly URLs in Yii 【发布时间】:2012-07-22 10:49:53 【问题描述】:我想在 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
【问题讨论】:
您可能最终不得不编写自己的 UrlRule 类并将其放在规则数组的首位。鉴于您没有在 URL 中使用任何控制器/动作,要么就是这样,要么让 Yii 通过默认控制器/动作路由所有内容并在那里解析它。我编写了自己的 url 路由器,但我选择在 url 中需要一个控制器,这样更容易。 【参考方案1】:让我将我的评论表述为答案。您仍然需要自己实现一些东西,但这应该可以帮助您开始:
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>',
【讨论】:
以上是关于Yii 中的动态 SEO 友好 URL的主要内容,如果未能解决你的问题,请参考以下文章
Yii2 301 从原始 url 重定向到 .htaccess 中对 SEO 友好的 url 不起作用,需要其他解决方案