【问题标题】:Codeigniter - custom routesCodeigniter - 自定义路由
【发布时间】:2012-10-11 09:59:12
【问题描述】:

假设我有一个控制器“标准”和一个动作“主要”。

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

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

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

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

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

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

提前致谢。

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

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

    $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,它的值将变为 @987654327 @。

    记住这一点并自己决定!

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        相关资源
        最近更新 更多