Yii:路由的URL模式不是有效的正则表达式


Yii: The URL pattern for route is not a valid regular expression

我遇到了一个非常奇怪的问题。我配置了一些简单的路由,它们在我的本地服务器上运行(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。