【问题标题】:CodeIgniter internal redirectCodeIgniter 内部重定向
【发布时间】:2014-02-23 08:17:10
【问题描述】:

我想用一个控制器处理所有请求并且我有一个路由

$route['(:any)'] = 'links/index/$1';

我的数据库中的表(下面的截图)

因此,当 URL 为 mydomain.com/first-article 时,我从数据库控制器、操作和表 ID 中进行选择,并且我想重定向到文章控制器、文章操作并传递表 ID。 我该怎么做?

我还需要保留网址

mydomain.com/first-article

然后我用redirect() 重定向我收到错误:

ERR_TOO_MANY_REDIRECTS, because of $route['(:any)'] = 'links/index/$1';

【问题讨论】:

  • 您应该使用 htaccess 文件处理此重定向
  • 你能举个小例子吗?

标签: php codeigniter redirect


【解决方案1】:

老实说,我不会弄乱路线。相反,我用 uri->segment

抓住了 url 的一部分

只是给你一个想法

//example
//linksid
    $links_id = intval($this->uri->segment(3, 0));

所以http://www.mydomain.com/mycontroller/go/1 会抓住 1 然后我可以从那里重定向...

【讨论】:

    【解决方案2】:

    由于您的路由配置,会发生无限重定向。您的路线规则是

    $route['(:any)'] = 'links/index/$1';
    

    这意味着在域名执行链接控制器索引操作之后会发生什么。例如,假设 URl 是 http://www.mydomain.com/articles/article,CI 将使用 articles 作为参数执行链接控制器索引函数。在链接控制器中,您获取数据库并重定向到另一个控制器。但是由于路由配置,链接控制器将再次执行。于是就变成了一个重定向循环。

    如果您需要执行文章控制器,则必须在其上方添加另一条规则,如下所示:

     $route['articles/article/(:any)'] = 'articles/article/$1';
    

    我建议你先好好考虑一下你的 url 模式,然后再写路由。

    【讨论】:

    • 但我想要这样的 URL 结构:domain.com/my-article 或 domain.com/my-products 或 domain.com/user-name。结构相同,但控制器和动作不同。
    • 如果您决定使用 url 后缀或前缀,例如 my-article,假设所有文章都有后缀 -article,那么您可以写为 $routes['(:any)-article'] = 'articles/article/$1'。我希望你明白我的意思
    【解决方案3】:

    我使用 CodeIgniter Modular Extensions - HMVC https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc 解决了这个问题。现在我可以在任何控制器中运行任何模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多