简单的 URL 路由不适用于 CodeIgniter

Posted

技术标签:

【中文标题】简单的 URL 路由不适用于 CodeIgniter【英文标题】:Simple URL Routing not working with CodeIgniter 【发布时间】:2013-03-11 10:23:47 【问题描述】:

我对 CodeIgniter 还很陌生,并且完成了我的第一个项目。但是,在我把它放到我的托管站点之前,我想使用 CodeIgniter 在 config 文件夹中提供的 routes.php 文件来清理 URL。

我的网站将使用以下网址加载:

http://fakehost:8888/TheWorksPlumbing/index.php/theWorksPlumbingController/index/home
http://fakehost:8888/TheWorksPlumbing/index.php/theWorksPlumbingController/index/about
http://fakehost:8888/TheWorksPlumbing/index.php/theWorksPlumbingController/index/services

它还将使用默认控制器 url 加载主页:http://fakehost:8888/TheWorksPlumbing/

但是,我希望网站的每个页面都有一个 url,但无法使其正常工作。例如我想要:

http://fakehost:8888/TheWorksPlumbing/home
http://fakehost:8888/TheWorksPlumbing/about
http://fakehost:8888/TheWorksPlumbing/services

这里是 theWorksPlumbingController 控制器文件的代码:

class TheWorksPlumbingController extends CI_Controller 

    public function index($page = 'home')

        if ( !file_exists('application/views/'.$page.'.php') ) 
            show_404();
        

        $this->load->view('templates/header');
        $this->load->view($page);
        $this->load->view('templates/footer');
    

这是我的 routes.php 文件中不起作用的代码:

$route['default_controller'] = "theWorksPlumbingController";
$route['404_override'] = '';
$route['(:any)'] = "index.php/theWorksPlumbingController/index";

我需要添加或更改什么才能让网站仅加载 /home 或 /about 或 /services?

【问题讨论】:

快速健全性检查,您的 mod_rewrite 规则是什么样的? 大卫,我还没有触及 mod_rewrite 规则。你的意思是 .htaccess 文件?它说:拒绝那里的一切。我认为这很糟糕? 查看您已回答的问题,您似乎没有在 .htaccess 下设置 mod_rewrite 规则。否则,我强烈建议您花一些时间阅读 Apache 的用户指南 - httpd.apache.org/docs/2.2 它们相当枯燥,但重要的是您了解 Apache 正在或可能为您做什么。 【参考方案1】:
$route['home'] = 'theWorksPlumbingController/index/home';
$route['about'] = 'theWorksPlumbingController/index/about';
$route['services'] = 'theWorksPlumbingController/index/services'; 

可能会这样做.. 虽然我从未尝试过这样的设置。通常在 CI 中,您为每个页面创建一个方法,如下所示:

class TheWorksPlumbingController extends CI_Controller 

    public function home()

        $this->load->view('templates/header');
        $this->load->view('home');
        $this->load->view('templates/footer');
    

    public function about()

        $this->load->view('templates/header');
        $this->load->view('about');
        $this->load->view('templates/footer');
    

    public function services()

        $this->load->view('templates/header');
        $this->load->view('services');
        $this->load->view('templates/footer');
    

可以通过

访问
http://www.example.com/index.php/theWorksPlumbingController/home
http://www.example.com/index.php/theWorksPlumbingController/about
http://www.example.com/index.php/theWorksPlumbingController/services

并且可以通过

进行路由
$route['home'] = 'theWorksPlumbingController/home';
$route['about'] = 'theWorksPlumbingController/about';
$route['services'] = 'theWorksPlumbingController/services';

https://www.codeigniter.com/user_guide/general/routing.html

【讨论】:

我尝试将您的路线添加到我的 routes.php.. 但它不起作用。然后我将它们保存在 routes.php 中并尝试将您建议的功能添加到控制器文件 theWorksPlumbingController.php 中,但这也不起作用?我是否缺少需要自动加载的内容?或者可能是 .htaccess 文件中的某些内容? 确保去掉$route['(:any)'] = "index.php/theWorksPlumbingController/index"; 路由。 .htaccess 根本不应该影响路线; .htaccess 用于将 index.php 隐藏在 url 中。 啊,好的。我将 index.php 添加到 url 并且它有效。所以现在我有localhost:8888/TheWorksPlumbing/index.php/home 但如何隐藏 index.php? ellislab.com/forums/viewthread/155801 或者只搜索“codeigniter hide index.php”。这是最常见的问题之一,并且有成千上万的答案。

以上是关于简单的 URL 路由不适用于 CodeIgniter的主要内容,如果未能解决你的问题,请参考以下文章

带有 Swift 3 的 Alamofire 4.3,POST 请求不适用于 URL 参数

路由不适用于自托管 Web API [重复]

mirage.js 不适用于 Angular 中的子 url 路径(仅适用于根路径)

Url.Content() 不适用于复杂的 URL

vuejs vue-router 不适用于 Firebase 托管

其他路由而不是默认路由不适用于 XAMPP