我希望除api路由之外的所有路由都可以导航到站点/索引路由,而所有/ api路径则要对相应模块执行。 我添加了以下路线规则
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//api module
'api/<controller:\w+>/<action:[\w\-]+>' => '<controller>/<action>',
'api/<controller:\w+>' => 'api/<controller>',
//all other paths
'<controller:[\w\-]+>/<action:[\w\-]+>' => 'site/index',
'<controller:[\w\-]+>/' => 'site/index',
],
],
以下内容适用于
的2级网址路由/users/create
/users/view
但是当我访问的路径超过2条时,例如
/users/create/12
/admin/uom/create/new
路由未重新定向到站点/索引
我还需要添加些什么来确保即使路径超过3条的所有路由都通过站点/索引执行,而具有api前缀的那些路由则通过controller/action
或/api/controller
执行。
我错过了什么?
答案 0 :(得分:0)
没有针对这种情况的内置支持。但是您可以创建将匹配任何路由的自定义URL规则:
class FallbackUrlRule extends Component implements UrlRuleInterface {
public $route = 'site/index';
public function parseRequest($manager, $request) {
return [$this->route, []];
}
public function createUrl($manager, $route, $params) {
return false;
}
}
并在您的应用程序配置中使用它:
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
//api module
'api/<controller:\w+>/<action:[\w\-]+>' => '<controller>/<action>',
'api/<controller:\w+>' => 'api/<controller>',
//all other paths
[
'class' => FallbackUrlRule::class,
'route' => 'site/index',
]
],
],
请注意,它只会忽略请求路径并捕获所有请求,包括那些应引发404错误的请求。它还不会检测路径中的参数(它将忽略12
中的/users/create/12
)。