如何为url规则的所有键设置前缀?

How to set prefix to all keys of url rules?

我想为 urlManager 规则的所有键设置前缀。目前我这样写规则:

'rules' => [
    'api' => '_public/site/index',
    'api/<controller>/<action>' => '_public/<controller>/<action>',      
     etc
]

我想避免所有规则的 copy/past-ing of api 前缀。因为它可能是 500 条规则。

有没有办法在某个地方定义一个前缀,以便 Yii 为每个规则键本身放置它?

$prefix$prefixRoute 正在为值设置前缀,但我想要键。

也许这可以通过使用 .htaccess 来完成?但是不知道应该写什么。

yii\web\GroupUrlRule 及其 $prefix 属性 正是您要找的。

你的情况:

rules => [
    // ...
    new \yii\web\GroupUrlRule([
        'prefix' => 'api',
        'rules' => [
            '<controller>/<action>' => '_public/<controller>/<action>',
            // ... other /api/_ routes
        ],
    ]),
    // ... other rules
]

我不确定将 '/' => '_public/site/index', 这样的规则添加到组中是否适用于 /api 路由,或者您是否必须在组规则之外明确设置该规则。如果您要在组规则之外为 /api 设置规则,最好将其放在组规则之前。

具有以下属性的 GroupUrlRule:前缀、路由前缀和规则就足够了。您可以按如下方式使用它:

new GroupUrlRule([
    'prefix' => 'api',
    'routePrefix' => '',
    'rules' => [
          '' => '_public/site/index',
          '<controller>/<action>' => '_public/<controller>/<action>',
    ]
])

将此添加到主配置文件中 urlManager 下的规则中。

我在配置文件中添加了一行:

$config = [

    'components' => [
        'request' => [
            // some code
            'baseUrl' => '/api',   // <--- this line
        ], 
    ]
]

它奏效了。

$baseUrl - 应用程序的相对 URL。 https://www.yiiframework.com/doc/api/2.0/yii-web-request#$baseUrl-detail