Php 不允许路由URL

Php 不允许路由URL,php,model-view-controller,routing,Php,Model View Controller,Routing,我正在开发一个个人MVC框架,包括一个URL路由器 目前,我有一个页面控制器和一个“站点地图”视图。所以我可以去url.com/pages/sitemap/ 我还为“/info/{page}/”设置了URL路由。我已经为静态页面做了这项工作,我希望在它们的URL中有“信息”。这也适用于站点地图 然后,正如预期的那样,我也将/sitemap/映射到了sitemap页面 我只希望/sitemap/是一个有效的资源,禁用/重定向其他URL的最佳方式是什么?这取决于路由器的实现。如果您可以在控制器中访问

我正在开发一个个人MVC框架,包括一个URL路由器

目前,我有一个页面控制器和一个“站点地图”视图。所以我可以去url.com/pages/sitemap/

我还为“/info/{page}/”设置了URL路由。我已经为静态页面做了这项工作,我希望在它们的URL中有“信息”。这也适用于站点地图

然后,正如预期的那样,我也将/sitemap/映射到了sitemap页面


我只希望/sitemap/是一个有效的资源,禁用/重定向其他URL的最佳方式是什么?这取决于路由器的实现。如果您可以在控制器中访问原始URL,则可以对其进行比较,并在需要时发出重定向:

class PagesController {

    function sitemap($request) {
        if ($request->url == '/info/sitemap/')
            $this->response->redirect('/sitemap/');

        //regular processing here
    }
}
编辑 如果您的规则是基于正则表达式的,那么另一个选项是添加“排除”模式,这将使
/info/sitemap/
/info/{page}/
模式不匹配

大致如下:

$router->add(array(
    'url' => '/info/(?<action>.*)/',
    'controller' => 'PagesController',
    'exclude' => '(?:sitemap)',
));
$router->添加(阵列)(
“url'=>'/info/(?*)/”,
“控制器”=>“页面控制器”,
'排除'=>'(?:站点地图)',
));

您可能会在中找到与当前问题相关的答案。这不是一个真正的权限问题,我只想拥有一个规范的URL并重定向其他URL。是的,似乎是最好的选择。也许我可以给路由URL指定一个“不允许数组”。@GerbenJacobs或者,您可以定义规则,但只能使用一个URL。