2012-10-11 63 views
2

可以说我有一个控制器'标准'的动作'主'。Codeigniter - 自定义路线

如果我访问www.myapp.com/standard/main,它将调用标准控制器中的主要操作。

现在,如果我想改变我进入routes.php文件和设置某事像下面的网址:

$路线[“欢迎”] =“标准/主”;

现在我可以访问www.myapp.com/welcome,它会调用相同的动作。

但是,仍然可以访问www.myapp.com/standard/main。现在我有两条路线导致相同的控制器操作。

这是通常的方式还是应该以某种方式禁用现在不需要的www.myapp.com/standard/main路由?如果是这样,我该怎么做?

在此先感谢。

回答

1

这完全是你决定的默认行为。如果您决定禁用原始地址,你可以写类似

$route['standard/main'] = 'standard/404'; 

或任何自定义位置,这取决于你的项目,你怎么想它应该是什么样子,比如你可以“块”任何从方法直接访问:

$route['standard/(:any)'] = 'standard/404'; 

但记住,如果你的路线像你这样$route['welcome'] = "standard/main";,那么你应该永远记住,功能$this->uri->segment(n)会显示不同的值,例如,如果我会去的网址yoursite.com/welcome/123,值为$this->uri->segment(2)将是123,但如果我访问原始URL yoursite.com/standard/main/123,它的值将更改为main

忍受这一点,并为自己决定!

1

假设这是一个常用的结构,您将使用每个动作,您可以检查网段中的网段,然后进行适当的重定向。在从standard/main去欢迎的情况下,您将有以下:

class Standard extends CI_Controller { 

    public function main() { 
     if($this->uri->segment(1) == 'standard') { 
      redirect('welcome', 'location', '301'); 
     } 
    } 

} 

这会再检查第一段的URL,如果它看到你已经来到这个URL,您重定向到适当的路线。这可以应用于您想要做同样事情的每个动作。提供301表示永久重定向。

更新

刚刚发现了类似的问题(同):Only allow URL's specified in routes to be seen in Codeigniter