简单的 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 参数
mirage.js 不适用于 Angular 中的子 url 路径(仅适用于根路径)