CodeIgniter(下面简称"CI")是一款国外优秀的PHP轻量级MVC框架,它支持PHP4和PHP5。是开发中小型可拓展性需求高的Web应用程序的利器。眼下你所见到的这个博客程序,正是採用CI进行的编写。php
秉承MVC架构的思想,CI中的所有控制器都需要通过单点入口文件index.php(默认)来载入调用。html
也就是说。在默认状况下,所有CI开发项目的URL都形例如如下面这样的形式:apache
http://localhost/index.php/blog/logs/this_is_a_test_entry架构
很是显然。默认状况下。index.php在URL地址段中的存在必定程度上影响了URL的简洁和SEO的进行。app
咱们可以经过如下本文介绍的方法来去掉这个讨厌的Index.php。框架
你也许已经注意到在CodeIgniter用户手冊中,已经存在关于此问题的解决方法。jsp
但官方提供的这个.htaccess配置,并不是所有时候都能解决这个问题。本文现在给出一个更无缺的解决方式。ide
注意:在继续以前,请确认你的主机支持.htaccess配置。当中。假设Apache做为Webserver,需要开启mod_rewrite模块的支持;假设将IIS做为Webserver,则需要额外安装ISAPI_Rewrite拓展。codeigniter
详细方法例如如下:学习
1.
下面为.htaccess文件信息 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | RewriteEngineOn RewriteBase RewriteCond RewriteCond RewriteRule^(.*)$ #假设没有安装mod_rewrite模块,所有的404页面都将被 |
3.
1 | $config['index_page'] |
至
1 | $config['index_page'] |
以上三步。缺一不可。假设一切配置正常。你会发现,再次执行程序的时候。程序已经本身主动隐藏index.php这个URL段了!
在CodeIgniter中,当我将URI寻址方式从AUTO更改成PATH_INFO时。即:
$config['uri_protocol']
注:PATH_INFO的开启。是因为我但愿经过$_GET来取值,而不是系统默认的POST方式。
在此状况下怎样仍然使用以上.htaccess方案,结果将是:index.php顺利隐藏,但主控制器并不能正确的获取值。
解决方式例如如下,就一步:
去掉下面重写规则中index.php后面的问号就能够。
/$1[L]
改动后的规则例如如下:
其它地方不变。
=============================================================================================================
【其它】跟我学站点开发框架CodeIgniter之url篇
预计很是多人学习CodeIgniter第一步想作的就是怎样去掉index.php,这个官方手冊就有相关教程,改动.htaccess 文件(前提是你的server是apache):
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
固然了。有很是多人依照要求改动了,但是却出现了错误,所有的訪问都404了,而且。这个404是apache的404页面。而不是CodeIgniter的404错误页面。
出现这样的问题,是对apache的rewrite规则不理解:
因此呢,假设CodeIgniter假设不是安装在站点的根文件夹,一定会出现错误。怎样解决呢,在CodeIgniter手冊中也给出了对应的解决方式:
把上面最后一句改成:RewriteRule ^(.*)$ index.php/$1 [L]
仅仅需要去掉index.php前面的斜杠便可。
经过上面的步骤。咱们已经隐藏了index.php了,现在咱们制做的站点更加的rest了。通常人已经没法一眼就看出你的站点是用CodeIgniter开发的,仍是ROR开发的。
但是,怎样在url后面添加后缀呢,这样,咱们甚至可以隐藏或者伪造站点的开发语言,经过改动 config/config.php 文件,你可以为 CodeIgniter 生成的 URL 加入一个指定的文件后缀,比方你可以加入.html,甚至你可以加入.asp,.jsp。
这样咱们就可以将 http://www.hualai.net.cn/index.php/news/view/about 变成 http://www.hualai.net.cn/index.php/news/view/about.html。
普通状况下咱们不需要使用查询字符串,但是,总有一些特殊状况,是咱们用CodeIgniter的rest模式没法完毕的,这样咱们就需要在 URL 中使用查询字符串:
index.php?c=products&m=view&id=345
CodeIgniter 默认此功能是关闭的,假设想开启的话。打开配置文件 application/config/config.php 您可以看到例如如下内容:
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c'; //控制器名
$config['function_trigger'] = 'm'; //方法名
$config['directory_trigger']='d'; //控制器所在子文件夹名称
假设你将 enable_query_strings 更改成 TRUE 。那么这个功能就被激活了。此时,你就可以经过keyword来调用需要的控制器和方法了:
index.php?c=controller&m=method
当咱们在使用CodeIgniter当进行分页,这能够派上用场。