【发布时间】:2014-08-25 12:28:46
【问题描述】:
所以,使用 urlManager 我已经能够做到这一点:
'people/<id:\d+>/<last:.*?>/<name:.*?>'=>'person/view',
生成这个:http://foo.com/people/3/smith/john
我想去掉 ID 号,在本例中为“3”
我试过用这个:
'people/<last:.*?>/<name:.*?>'=>'person/view', //makes sense right?
但是,当我尝试导航到 http://foo.com/people/smith/john 时,出现服务器 400 错误。 是什么赋予了?我应该尝试修改 .htaccess 文件吗?
这里要求的是我的整个 urlManager 组件:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'about' => array('site/page', 'defaultParams' => array('view' => 'about')),
'contact'=>'site/contact',
'login' =>'site/login',
'/'=>'site/index',
'people/<last:.*?>/<name:.*?>'=>'person/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
这是我的 PersonController.php 文件:
public function actionView()
{
$person=$this->loadModel();
$this->render('view',array(
'model'=>$person,
));
}
private $_model;
public function loadModel()
{
if($this->_model===null)
{
if(isset($_GET['last']))
{
$this->_model=Person::model()->findByPk($_GET['id']);
}
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}
【问题讨论】:
-
您的第二条规则中似乎有错字。它与第一个相同。此外,如果您粘贴了 urlManager 组件的全部内容,这将有所帮助,这样我们就可以看到哪些规则取代了哪些规则。这应该很容易解决。
-
你说得对,我确实有错字,我编辑了我的问题以反映这一点
-
你确定是 400 而不是 500?无论哪种情况,您都可以访问您的服务器日志以查看错误是什么?
-
是的,肯定是 400。错误日志什么也没说,除了我今天早些时候犯的一些 php 语法错误。
-
在这里抓住稻草,尝试以下操作:将最通用的规则“/”移到底部。将该规则中的星号更改为加号。并将点更改为
\w。
标签: url url-rewriting yii