2

可以说我有一个控制器“标准”和一个动作“主要”。

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

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

$route['welcome'] = "标准/主";

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

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

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

提前致谢。

4

2 回答 2

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但如果我访问原始 URL yoursite.com/standard/main/123,它的值将变为main.

请记住这一点并自己决定!

于 2012-10-11T10:12:05.040 回答
1

假设这是您将使用的通用结构,对于每个操作,您可以检查 URL 中的段,然后进行适当的重定向。在从 fromstandard/main到 welcome 的情况下,您将拥有以下内容:

class Standard extends CI_Controller {

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

}

然后,这将检查 URL 中的第一段,如果它发现您已访问此 URL,则将您重定向到适当的路由。然后可以将其应用于您想要执行相同操作的每个操作。提供 301 表示永久重定向。

更新

刚刚发现了一个类似(相同?)的问题:只允许在 Codeigniter 中看到路由中指定的 URL

于 2012-10-11T10:16:59.350 回答