教你如何在CI框架中使用 .htaccess 隐藏url中index.php
秉承MVC架构的思想,CI中的所有控制器都需要经过单点入口文件index.php(默认)来加载调用。也就是说,在默认情况下,所有CI开发项目的URL都形如以下这种形式: http://localhost/index.php/blog/logs/this_is_a_test_entry 很显然,默认情况下,index.php在URL地址段中的存在一定程度上影响了URL的简洁和SEO的进行。我们可以通过下面本文介绍的方法来去掉这个讨厌的Index.php。 你或许已经注意到在CodeIgniter用户手册中,已经存在关于此问题的解决方法。但官方提供的这个.htaccess配置,并不是所有时候都能解决问题。本文现在给出一个更完善的解决方案。 注意:在继续之前,请确认你的主机支持.htaccess配置。其中,如果Apache作为Web服务器,需要开启mod_rewrite模块的支持;如果将IIS作为Web服务器,则需要额外安装ISAPI_Rewrite拓展。 具体方法如下: 1. 将以下配置信息复制并保存为.htaccess文件。 代码如下: RewriteEngineOn
RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule^(.*)$ /index.php?/$1 [L] #如果没有安装mod_rewrite模块,所有的404页面都将被 #发送到index.php,此时,程序会像没有设置隐藏时一样运行 2. 将以上.htaccess文件上传到CI所在项目的根目录(即与index.php同级目录下) 3. 修改application/config.php中的如下参数: 代码如下: $config['index_page'] = "index.php";
至 代码如下: $config['index_page'] = ""; //设置为空
以上三步,缺一不可。如果一切配置正常,你会发现,再次运行程序的时候,程序已经自动隐藏index.php这个URL段了! Trackback(UTF-8):http://www.cnSaturn.com/trackback/40 CodeIgniter中开启PATH_INFO时mod_rewrite隐藏index.php的问题。在CodeIgniter中,当我将URI寻址方式从AUTO更改为PATH_INFO时,即: 代码如下: $config['uri_protocol'] = 'PATH_INFO';
注:PATH_INFO的开启,是因为我希望通过$_GET来取值,而不是系统默认的POST方式。 在此情况下如何仍然使用以上.htaccess方案,结果将是:index.php顺利隐藏,但主控制器并不能正确的获取值。 解决方案如下,就一步: 去掉以下重写规则中index.php后面的问号即可。 代码如下: RewriteRule^(.*)$ /index.php?/$1[L]
修改后的规则如下: 代码如下: RewriteRule^(.*)$ /index.php/$1 [L]
其他地方不变。 如何删除index.php文件估计很多人学习CodeIgniter第一步想做的就是如何去掉index.php,这个官方手册就有相关教程,修改.htaccess 文件(前提是你的服务器是apache): 代码如下: RewriteEngine on
RewriteCond $1 !^(index.php|images|robots.txt) RewriteRule ^(.*)$ /index.php/$1 [L] 当然了,有很多人按照要求修改了,但是却出现了错误,所有的访问都404了,而且,这个404是apache的404页面,而不是CodeIgniter的404错误页面。 出现这种问题,是对apache的rewrite规则不理解: 第一行、将RewriteEngine引擎设置为on,就是让url重写生效; 所以呢,如果CodeIgniter如果不是安装在网站的根目录,必然会出现错误。如何解决呢,在CodeIgniter手册中也给出了相应的解决方案: 把上面最后一句改为: 代码如下: RewriteRule ^(.*)$ index.php/$1 [L]
只需要去掉index.php前面的斜杠就行。
|