Routing 此nette路由规则是否可能将所有url请求重定向到主页?

Routing 此nette路由规则是否可能将所有url请求重定向到主页?,routing,nette,Routing,Nette,我和一个高级开发人员争论说我的路由错误且危险,所有的请求都可能被路由到homepege,但我认为他错了,我甚至测试了它。他说加上这个 $this->router[] = new Route('/', 'Front:Bridge:default'); 所有低于此定义的路线都将被忽略,所有路线都将被路由到Front:Bridge 我认为这是BS,因为路由清楚地表明,只将请求直接重定向到web根目录到前端:Bridge。应用程序的功能确实并没有改变,但他坚持认为我肯定会在某个地方引入不可预见的

我和一个高级开发人员争论说我的路由错误且危险,所有的请求都可能被路由到homepege,但我认为他错了,我甚至测试了它。他说加上这个

$this->router[] = new Route('/', 'Front:Bridge:default');
所有低于此定义的路线都将被忽略,所有路线都将被路由到Front:Bridge

我认为这是BS,因为路由清楚地表明,只将请求直接重定向到web根目录到前端:Bridge。应用程序的功能确实并没有改变,但他坚持认为我肯定会在某个地方引入不可预见的bug

整个routerFactory供参考

public function getRouter()
{
    $this->router[] = new Route('/muj-ucet[/<action=default>]', [
        'module' => 'Front',
        'presenter' => 'Account',
        'action' => [
            Route::VALUE => 'default',
            Route::FILTER_TABLE => [
                'zpravy' => 'message',
                'profil' => 'profile',
                'objednavky' => 'orders',
                'sprava-uzivatelu' => 'users'
            ],
        ],
    ]);
    $this->router[] = new Route('/', 'Front:Bridge:default');
    $this->router[] = new Route('[<lang [a-zA-Z]{2}>/]html/prihlaseni.html', 'OnlineUser:Front:Login:default');
    $this->router[] = new Route('/superadmin/prihlaseni', 'OnlineUser:Front:Login:superAdminLogin');
    $this->router[] = new Route('[<lang [a-zA-Z]{2}>/]html/registrace.html', 'OnlineUser:Front:Registration:default');
    $this->router[] = new Route('/potvrzeni-registrace', Linker::ACTION_CONFIRM_REGISTRATION);
    $this->router[] = new Route('/aktivace-uctu', Linker::ACTION_ACTIVATION_ACCOUNT);
    $this->router[] = new Route('/nove-heslo', Linker::ACTION_FORGOT_PASSWORD);
    $this->router[] = new Route('/logout', 'OnlineUser:Front:Login:logout');
    $this->router[] = new Route('/validace/<action=default>', [
        'module' => 'OnlineUser:Front',
        'presenter' => 'Validation',
        'action' => [
            Route::VALUE => 'default',
            Route::FILTER_TABLE => [
                'validace-emailu' => 'validateEmailNotExists',
                'validace-ico' => 'validateIcNotExists',
                'validace-ico-ares-heo' => 'validateIcAresAndHeO',
            ],
        ],
    ]);
    $this->router[] = new Route('[<path .+>]', 'Front:Bridge:default');
    return $this->router;
}
公共函数getRouter()
{
$this->router[]=新路由('/muj-ucet[/]'[
“模块”=>“前部”,
“演示者”=>“帐户”,
“操作”=>[
路由::值=>“默认值”,
路由::筛选器_表=>[
'zpravy'=>'消息',
“profile”=>“profile”,
“objednavky”=>“订单”,
“sprava uzivatelu”=>“用户”
],
],
]);
$this->router[]=新路由('/','Front:Bridge:default');
$this->router[]=新路由('[/]html/prihlaseni.html','OnlineUser:Front:Login:default');
$this->router[]=新路由('/superadmin/prihlaseni',OnlineUser:Front:Login:superAdminLogin');
$this->router[]=新路由(“[/]html/registence.html”,“OnlineUser:Front:Registration:default”);
$this->router[]=新路由('/potvrzeni REGISTRATION',Linker::ACTION\u CONFIRM\u REGISTRATION);
$this->router[]=新路由('/aktivace uctu',链接器::操作\激活\帐户);
$this->router[]=新路由('/nove heslo',Linker::ACTION\u忘记了密码);
$this->router[]=新路由('/logout',OnlineUser:Front:Login:logout');
$this->router[]=新路由(“/validace/”[
'module'=>'OnlineUser:Front',
“演示者”=>“验证”,
“操作”=>[
路由::值=>“默认值”,
路由::筛选器_表=>[
'validace emailu'=>'validateEmailNotExists',
“validace ico”=>“validateIcNotExists”,
“validace ico ares heo”=>“validateIcAresAndHeO”,
],
],
]);
$this->router[]=新路由('[]','Front:Bridge:default');
返回$this->router;
}

解决这场争论的一个好办法是从官员那里获得引证

在回答您的问题之前,重要的是:

路由的顺序很重要,因为它们是按顺序从第一个路由到最后一个路由进行尝试的。基本规则是我们从最具体到最一般地声明路由。

接下来,回想一下路由是完全匹配的。如果有
/foo
的路由,它将与
/foo/bar
的请求不匹配。没有官方的引证,但它是隐含的,并且很容易通过测试应用程序验证

有了这些知识,让我们来看看你的提案。如果您使用此路线:

$this->router[] = new Route('/', 'Front:Bridge:default');
你说得对。这将只匹配
/
。不是
/foo
,不是
/foo/bar
,等等。因为它是如此明确,顺序并不重要,也没有太大的灾难空间

然而,在代码片段的结尾有一条重要的路线:

$this->router[] = new Route('[<path .+>]', 'Front:Bridge:default');
$this->router[]=新路由('[]','Front:Bridge:default');
这是一个全面覆盖的路由,它不同于匹配的
/
,并且可能是您的对等方实际担心的问题:因为它是不明确的(通过匹配所有路径!),所以此路由的顺序肯定很重要。通过将其放在第一位,所有请求都将重定向到
Front:Bridge:default