Yii2-带hypens的UrlManager和params

Yii2-带hypens的UrlManager和params,yii2,yii2-basic-app,yii2-urlmanager,Yii2,Yii2 Basic App,Yii2 Urlmanager,我有以下网址: http://test.local/index.php?r=site%2Findex&slug=blog-detail http://test.local/index.php?r=site%2Findex&slug=blog http://test.local/ 我想得到: http://test.local/blog http://test.local/blog-detail http://test.local/ 我将所有请求发送到SiteControll

我有以下网址:

http://test.local/index.php?r=site%2Findex&slug=blog-detail
http://test.local/index.php?r=site%2Findex&slug=blog
http://test.local/
我想得到:

http://test.local/blog
http://test.local/blog-detail
http://test.local/ 
我将所有请求发送到
SiteController::actionIndex($slug)
,我使用的是基本应用程序模板

到目前为止,我已经能够隐藏
index.php
site/index

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
       '<slug\w+>' => 'site/index',
    ],
]
'urlManager'=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
''=>'站点/索引',
],
]

但似乎
\w+
-
的字符串不匹配。此外,如果slug为空,则应显示:
http://test.local/

您试图创建的是基于GET参数的特定url。在以下示例中,如果用户输入url,则
SiteController::actionIndex($slug)
函数将获取参数

'urlManager' => [
            'pattern' => '<slug>',
            'route' =>'site/index',
            'ecnodeParams' => false,
            //class => any\custom\UrlRuleClass,
            //defaults => [] 
        ]
'urlManager'=>[
'模式'=>'',
“路由”=>“站点/索引”,
“ecnodeParams”=>错误,
//class=>any\custom\UrlRuleClass,
//默认值=>[]
]
或者您想要另一个url来指定它是否为详细视图?您可以这样做:

  'urlManager' => [
                'pattern' => '<slug>-detail',
                'route' =>'site/detail',
                'ecnodeParams' => false,
                //class => any\custom\UrlRuleClass,
                //defaults => [] 
            ]
“urlManager”=>[
'模式'=>'-详细信息',
“路线”=>“地点/细节”,
“ecnodeParams”=>错误,
//class=>any\custom\UrlRuleClass,
//默认值=>[]
]
在本例中,如果用户将字符串'-detail'放在slug的末尾,那么它将解析到请求的路由
SiteController::actionDetail($slug)

请注意,如果尚未启用,请在配置文件中启用PrettyURL


您可以在

或中找到有关此主题的更多信息。您试图创建的是基于GET param的特定url。在以下示例中,如果用户输入url,则
SiteController::actionIndex($slug)
函数将获取参数

'urlManager' => [
            'pattern' => '<slug>',
            'route' =>'site/index',
            'ecnodeParams' => false,
            //class => any\custom\UrlRuleClass,
            //defaults => [] 
        ]
'urlManager'=>[
'模式'=>'',
“路由”=>“站点/索引”,
“ecnodeParams”=>错误,
//class=>any\custom\UrlRuleClass,
//默认值=>[]
]
或者您想要另一个url来指定它是否为详细视图?您可以这样做:

  'urlManager' => [
                'pattern' => '<slug>-detail',
                'route' =>'site/detail',
                'ecnodeParams' => false,
                //class => any\custom\UrlRuleClass,
                //defaults => [] 
            ]
“urlManager”=>[
'模式'=>'-详细信息',
“路线”=>“地点/细节”,
“ecnodeParams”=>错误,
//class=>any\custom\UrlRuleClass,
//默认值=>[]
]
在本例中,如果用户将字符串'-detail'放在slug的末尾,那么它将解析到请求的路由
SiteController::actionDetail($slug)

请注意,如果尚未启用,请在配置文件中启用PrettyURL


您可以在

\w
不匹配的-中找到有关此主题的更多信息。您需要改用
[\w\-]
。在您的案例中,
+
至少需要一个字符。您应该改用
*

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
       '<slug:[\w\-]*>' => 'site/index',
    ],
]
'urlManager'=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
''=>'站点/索引',
],
]

\w
-
不匹配。您需要改用
[\w\-]
。在您的案例中,
+
至少需要一个字符。您应该改用
*

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
       '<slug:[\w\-]*>' => 'site/index',
    ],
]
'urlManager'=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
''=>'站点/索引',
],
]

谢谢你的回答,它奏效了。如果我有:base=es&slug=blog/post-slug-slug?我试图添加斜杠,但它没有抓住它,有什么建议吗?我想我找到了:[\w\u \/-]*谢谢你的回答,它起作用了。如果我有:base=es&slug=blog/post-slug-slug?我试图添加斜杠,但它没有抓住,有什么建议吗?我想我找到了:[\w\u\/-]*