Yii2:从URL中删除控制器
问题描述:
我正在使用高级模板。 我在SiteController上创建了所有的操作,所以我所有的url都是domain.com/site/something,我需要从url中删除单词“site”,所以它将成为domain.com/something。Yii2:从URL中删除控制器
我尝试以下规则基于this question
'urlManager' => [
'class' => 'yii\web\UrlManager',
'showScriptName' => false,
'enablePrettyUrl' => true,
'rules' => array(
'/<action:\w+>/<id:\d+>' => 'site/<action>',
'/<action:\w+>' => 'site/<action>',
'/noticia/<slug>' => 'site/noticia',
),
],
也试过此基础上this other question:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'showScriptName' => false,
'enablePrettyUrl' => true,
'baseUrl' => 'http://localhost/websites/transcita/app/frontend/web',
'rules' => array(
[
'pattern' => '<action:\w+>',
'route' => 'site/<action>'
],
[
'pattern' => '<action:\w+>/<id:\d+>',
'route' => 'site/<action>'
],
'/noticia/<slug>' => 'site/noticia',
),
],
但也不能正常工作。当我输入domain.com/something时,我得到了一个404。 我也试过没有第一/它也没有工作。
有什么想法?
答
尝试用:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false,
'rules' => [
// ...
// last rule
'<action:(.*)>' => 'site/<action>',
],
],
答
另一种方式:
'rules' => [
'<alias:\w+>' => 'site/<alias>',
],
+1
这种方式更好,因为第一个答案给所有其他控制器(不SiteController)404错误 – Skav
THANK YOU!这工作完美!你会碰巧有一个链接,我可以阅读\ w +和(。*)之间的区别,因为这个改变确实有效。 –
在这里你可以找到reg expr的绝佳解释:https://regex101.com/。 \ w +代替任何字母,数字或下划线。*匹配零个或多个字符。也许你的行为是由多个单词组成的。 –