假设我有一个控制器'标准',其动作为'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路线?如果是这样,我该怎么做?
提前致谢。
答案 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