Yii干净的URL与id和名称

时间:2014-05-12 06:53:58

标签: php yii seo

我希望我的网址有以下模式:

http://example.com/controller/view_id/title_name, like SO:

http://stackoverflow.com/question/1/title

Config.php:

'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'appendParams' => true,
        'rules'=>array(
            'user/<id:\d+>/<name:\w+>'=>array('user/view', 'caseSensitive'=>false),
            '<controller>/<id:\d+>/<name:.*?>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
    )

UserController中:

public function actionView($id)
{
   $this->render('view', array(
     'model' => $this->loadModel($id),
   ));
}

我正在尝试将user/view/1重定向到user/1/my_username 网址user/1/username正在将我重定向到Error 400 invalid request。 我错过了什么?

1 个答案:

答案 0 :(得分:2)

如果您的用户和问题控制器有action view。此处视图应该是操作的名称。

试试这个:

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
    'appendParams' => true,
     'caseSensitive'=>false,//use case sensitivity here 
    'rules'=>array(
        '<controller>/<view_id:\d+>/<title_name:[\w -\.]+>'=>'<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
        '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
    ),
)

如果你的网址是这样的

http://stackoverflow.com/question/1/title

当您点击此url.In main.php时,此行将显示您的网址。

'<controller>/<view_id:\d+>/<title_name:[\w -\.]+>'=>'<controller>/view',
//view_id and title_name you can change there name.

它会像这样工作:

 <controller>=question
 <view_id:\d+>=1
 <title_name:[\w -\.]+>=title

您将自动重定向到<controller> function actionView()。您可以在actionView()中获取此$_GET['view_id']$_GET['title_name']的网址值。< / p>

你必须这样做:

public function actionView() 
{ 
   $this->render('view', array( 'model' => $this->loadModel($_GET['view_id']))); 
 }