教你如何在CI框架中使用 .htaccess 隐藏url中index.php_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文件。
以下为.htaccess文件信息

复制代码 代码如下:

RewriteEngineOn

RewriteBase / 

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d 

RewriteRule^(.*)$ /index.php?/$1 [L]     

#如果没有安装mod_rewrite模块,所有的404页面都将被 #发送到index.php,此时,程序会像没有设置隐藏时一样运行  
ErrorDocument404 /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重写生效;
    第二行、配置url重写规则,!^(index\.php|images|robots\.txt) 这个正则表达式指明了哪些文件不需要重写,而是直接访问;
    第三行、^(.*)$是一个正则表达式,意思是对所有请求都发送到/index.php/$1,熟悉url的人都知道,以反斜杠(/)开头的,都是相对路径,相对于谁呢?根,也就是网址。

所以呢,如果CodeIgniter如果不是安装在网站的根目录,必然会出现错误。如何解决呢,在CodeIgniter手册中也给出了相应的解决方案:

把上面最后一句改为:

复制代码 代码如下:

RewriteRule ^(.*)$ index.php/$1 [L]

只需要去掉index.php前面的斜杠就行。

如何添加url后缀

通过上面的步骤,我们已经隐藏了index.php了,现在我们制作的网站更加的rest了,一般人已经无法一眼就看出你的网站是用CodeIgniter开发的,还是ROR开发的。

但是,如何在url后面增加后缀呢,这样,我们甚至可以隐藏或者伪造网站的开发语言,通过修改 config/config.php 文件,你可以为 CodeIgniter 生成的 URL 添加一个指定的文件后缀,比如你可以添加.html,甚至你可以添加.asp,.jsp。

这样我们就可以将 http://www.jb51.net/index.php/news/view/about 变成 http://www.jb51.net/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 ,那么这个功能就被激活了。此时,你就可以通过关键字来调用需要的控制器和方法了:

复制代码 代码如下:

    index.php?c=controller&m=method

当我们在使用CodeIgniter制作分页的时候,这个就可以派上用场了。

时间: 2024-09-25 15:55:05

教你如何在CI框架中使用 .htaccess 隐藏url中index.php_php技巧的相关文章

如何在zk框架下的grid或者listbox中横向显示checkbox自动换行

问题描述 如何在zk框架下的grid或者listbox中横向显示checkbox自动换行 大致代码如下: **_ <grid model="@bind(vm.list)"> <rows> <template name="model"> <row> <checkbox checked="true"/> <label value="@load(each.chinese)&qu

Yii隐藏URL中index.php的方法_php实例

本文实例讲述了Yii隐藏URL中index.php的方法.分享给大家供大家参考,具体如下: 一.修改config/下的main.php里的: 'urlManager'=>array( 'urlFormat'=>'path', 'showScriptName'=>false, 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w

Yii隐藏URL中index.php的方法

本文实例讲述了Yii隐藏URL中index.php的方法.分享给大家供大家参考,具体如下: 一.修改config/下的main.php里的: 'urlManager'=>array( 'urlFormat'=>'path', 'showScriptName'=>false, 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w

字段-获取表格中的动态隐藏域中的值

问题描述 获取表格中的动态隐藏域中的值 一个动态表格从数据库获取值,在一个列中有一个隐藏域有数据库的字段id,在js中获取这个这个字段的值,点击提交按钮获取当前列中隐藏域的值 出发日期 到达日期 反馈理由 提交 <script> function doSubmit(){ //获取隐藏域中的值 var id = $("#dateId").val(); alert(id); $.ajax({ url:"/order/"+id+"/update&qu

ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php

原文:ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php URL重写 通常的URL里面含有index.php,为了达到更好的SEO效果可能需要去掉URL里面的index.php ,通过URL重写的方式可以达到这种效果,通常需要服务器开启URL_REWRITE模块才能支持. 下面是Apache的配置过程,可以参考下: 1.httpd.conf配置文件中加载了mod_rewrite.so模块 2.AllowOverride None 将None改为

解析如何去掉CodeIgniter URL中的index.php_php技巧

CI默认的rewrite url中是类似这样的,例如你的CI根目录是在/CodeIgniter/下,你的下面的二级url就类似这样http://localhost/CodeIgniter/index.php/welcome.不太好看,怎么把其中的index.php取掉呢?1. 打开apache的配置文件,conf/httpd.conf :LoadModule rewrite_module modules/mod_rewrite.so,把该行前的#去掉.搜索 AllowOverride None(

JS实现在Repeater控件中创建可隐藏区域的代码_javascript技巧

由于web应用的规模不断增大,数据也越来越多了,有时候,由于在一个页面同时显示的数据太多,从而造成页面的不美观,用户因此也会感到厌倦和操作困难.因此,本文将介绍利用repeater控件的隐藏区域,以达到较好的数据显示效果.   防止数据过多加载有很多方法,比如采用数据分页的方法,又或者采用master/detail的方式,就是先显示每条数据的主要内容,而对于详细数据,用户只需要点detail的链接就可以了.本文将介绍另外一种方式来显示数据,它采用折叠的隐藏方式,当用户需要看每条记录的详细描述时,

在JavaScript中获取请求的URL参数[正则]_javascript技巧

第一种方法:,代码比较专业 推荐 复制代码 代码如下: <script> function GetLocationParam(param){ var request = { QueryString : function(val) { var uri = window.location.search; var re = new RegExp("" +val+ "=([^&?]*)", "ig"); return ((uri.ma

Javascript中的几种URL编码方法比较_javascript技巧

javascript中存在几种对URL字符串进行编码的方法:escape(),encodeURI(),以及encodeURIComponent().这几种编码所起的作用各不相同. escape() 方法:     采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字).比如,空格符对应的编码是%20. 不会被此方法编码的字符: @ * / + encodeUR