我遇到了一个非常奇怪的问题。我配置了一些简单的路由,它们在我的本地服务器上运行(PHP 5.3和5.4,都很好),但在部署服务器上(PHP 5.3.23)它们失败了,所以我甚至切换到Yii预先配置的默认路由(尽管我很确定我的路由是正确的),但它们也失败了,出现了以下异常The URL pattern "<controller:w+>/<id:d+>" for route "<controller>/view" is not a valid regular expression.
以下是路线:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
//'^$' => 'site/index',
//'<view:[w-_d]+>' => 'site/paged',
'<controller:w+>/<id:d+>'=>'<controller>/view',
'<controller:w+>/<action:w+>/<id:d+>'=>'<controller>/<action>',
'<controller:w+>/<action:w+>'=>'<controller>/<action>',
),
'showScriptName' => true,
),
正如你所看到的,我已经评论了我的两条路线,以确保我没有犯一些愚蠢的错误。
怎么了?
如果有人感兴趣,这里有回溯https://i.stack.imgur.com/Ltles.png
好吧,yii似乎抱怨<controller>/view
的部分。对于url规则,您可以使用前缀为_
的特殊占位符,用于模块、控制器和操作,分别为_m
、_c
和_a
。在你的情况下,你可以使用这样的东西:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
//'^$' => 'site/index',
//'<view:[w-_d]+>' => 'site/paged',
'<_c>/<id:d+>'=>'<_c>/view',
'<_c>/<_a>/<id:d+>'=>'<_c>/<_a>',
'<_c>/<_a>'=>'<_c>/<_a>',
),
'showScriptName' => true,
),
经过短暂的调查,这就是我的发现。
preg_match() Compilation failed: unknown option bit(s) set at offset 0
问题似乎是我的配置文件是UTF-8。解决方案是更新PHP&PCRE。