教你如何在CI框架中使用 .htaccess 隐藏url中index.php
发布时间:2023-11-14 11:49:57
秉承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。
这样我们就可以将 https://www.aspxhome.com/index.php/news/view/about 变成 https://www.aspxhome.com/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制作分页的时候,这个就可以派上用场了。


猜你喜欢
- 前言大家应该都知道在很多时候我们不得不和时间打交道,但在Python标准库中处理时间的模块其实设计的不是很友好,为什么我会这么说?因为我相信
- 先附上官方文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pan
- 散点图散点图是指在 回归分析中,数据点在直角坐标系平面上的 分布图,散点图表示因变量随 自变量而 变
- 本文实例讲述了Sanic框架Cookies操作。分享给大家供大家参考,具体如下:简介Sanic是一个类似Flask的Python 3.5+
- 1. 前言我们已经知道,对于InnoDB存储引擎而言,页是磁盘和内存交互的基本单位。哪怕你要读取一条记录,InnoDB也会将整个索引页加载到
- 全文检索引擎入门灰常不幸的是,关系型数据库对全文检索的支持没有被标准化。不同的数据库通过它们自己的方式来实现全文检索,而且SQL
- 目录1.事件循环2.协程和异步编程2.1 基本使用2.2 await2.3 Task对象1.事件循环可以理解成为一个死循环,去检查任务列表中
- 首先让我祭出一张数学王子高斯的照片,这位印在德国马克上的神人有多牛呢? 他是近代数学的奠基人之一,与牛顿, 阿基米德并称顶级三大数学家,随便
- 可以通过 reflect.DeepEqual 比较两个 slice/struct/map 是否相等:package main import
- 有时候需要把文件中的数据放入到数组中,这里提供了一种方法,可以根据文件结尾的标记进行数据拆分,然后再把拆分的文件放入数组中# -*-codi
- 本篇主要记录的是利用javscript实现一个网页计算器的效果,供大家参考,具体内容如下话不多说,代码如下:首先是html的代码:<!
- 本节课前一节我们开始设计第一个项目, 一个内训公司的企业网站, 本节课学习响应式导航部分。基本导航组件+响应式://基本导航组件+响应式&l
- 本文为大家分享了SQL Server 2008R2简单使用教程,供大家参考,具体内容如下1 首先找到开始菜单中相关内容;如下图;安装的组件不
- 用于操作数据库的SQL一般分为两种,一种是查询语句,也就是我们所说的 SELECT语句,另外一种就是更新语句,也叫做数据操作语句。言外之 意
- 环境使用Python 3.8–> 解释器 <执行python代码>Pycharm–
- Python的集合set原理集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个
- 我就废话不多说了,大家还是直接看代码吧~def list_dict(list_data): dict_data = {} &nb
- 1.业务需求背景业务提供一张底层图片1以及需要在底层图片上添加的图片2,两张图片大小不一致,将小图2添加到底图1中,并在其他的空白部分添加个
- python函数一、函数定义函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你
- 之前我写过一篇文章介绍如何实现中国站长站的文章干扰码功能:《谈中国站长站的文章干扰码实现方法》 首发在asp之家。如果大家有兴趣可以先看看。