我想获得URL如下:
http://domain.com/post/1/some-titles-here
但是我得到:
http://domain.com/post/1?title=some-titles-here
我正在使用这个配置:
'urlFormat' => 'path',
...
//'post/<id:d+>/<title>' => 'post/view/',
'post/<id:d+>/<title:w+>' => 'post/view/',
'post/<id:d+>' => 'post/view/',
...
然后得到我正在执行的URL:
Yii::app()->createAbsoluteUrl('post/view', array('id' => $this->id,'title' => $this->title));
我在这里遵循第三条规则:http://www.yiiframework.com/doc/guide/1.1/en/topics.url using-named-parameters
你用来匹配标题的正则表达式是不正确的:<title:w+>
将只匹配单个单词,但你的标题也有连字符。
Tuan是正确的;它符合下一条规则。这是因为URL管理器在规则中查找,直到找到一个匹配的。
使用此规则代替:
'post/<id:d+>/<title:([A-Za-z0-9-]+)>' => 'post/view/',
将用字母、数字和连字符匹配标题。
这是一个为我工作的代码:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
'' => 'site/index',
'article/<id:d+>/<alias:[-w]+>' => 'article/view',
'article/cat/<id:d+>-<alias:[-w]+>' => 'category/view',
结果网址:
- http://wowjp.black.dragon/article/2/test-zagolovka
- http://wowjp.black.dragon/article/cat/3 - 345435