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\/-]*