我一直在 Stackoverflow 和 YII 论坛上搜索,有很多答案,但对我没有帮助......
这是我的情况。
我有一个名为:proj的控制器和一个名为view的动作。它得到:id(int),name(字符串)。
所需的名称有时会带有特殊字符,例如: [ +,!#$%^&*- ]
因此,当我运行createUrl()函数时,它会返回不那么友好的 url。
例如: http ://www.qa-mysite.com/proj/1029/Conservation+of+the+Vermont+Salt+Pan+System%2C+Hermanus%2C+South+Africa 。
id = 1029 名称 = 佛蒙特盐锅系统保护,赫曼努斯,南非。
所以实际上我需要去除特殊字符并将空格之间的分隔符更改为“-”而不是“+”。
我当前的 curlManager 配置是:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'appendParams' => true,
'rules'=>array(
//array('proj/view/<name:\w+>', 'pattern'=>'proj/<id:\d+>'),
//'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'proj/<id:\d+>/<name:\w+>'=>array('proj/view', 'caseSensitive'=>false),
'<controller>/<id:\d+>/<name:.*?>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
)
创建网址示例:
$this->createUrl('proj/view', array('id' => $data->id, 'name' => $data->name));
更改 url 后,我需要将旧的301 重定向到新的 seo 友好的 url。
注意:我不能硬编码 str_replace。
非常感谢您的帮助:]