Codeigniter - 自定义路线

时间:2012-10-11 09:59:13

标签: codeigniter

假设我有一个控制器'标准',其动作为'main'。

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

现在,如果我想更改URL,我会进入routes.php并设置如下:

$ route ['welcome'] =“standard / main”;

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

完全由您决定默认行为。如果您决定禁用原始网址,则可以编写类似

的内容
$route['standard/main'] = 'standard/404';

或者任何自定义位置,它取决于您的项目以及您希望它的样子,例如,您可以“阻止”任何方法直接访问:

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

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

牢记这一点并自己决定!

答案 1 :(得分:1)

假设这是您将要使用的常见结构,对于每个操作,您可以检查URL中的段,然后适当地重定向。如果从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