0

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

目前我有一个 PagesController 和一个“站点地图”视图。所以我可以去 url.com/pages/sitemap/

我还为“/info/{page}/”设置了 URL 路由。我已经为我希望在其 URL 中包含“信息”的静态页面完成了此操作。这也适用于站点地图。

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

我只希望 /sitemap/ 成为有效资源,禁用/重定向其他 URL 的最佳方法是什么

4

1 回答 1

0

这完全取决于您的路由器的实现。如果您可以在控制器中访问原始 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)',
));
于 2013-03-11T22:31:18.477 回答