CI有效删除URL中的index.php

参考:

http://codeigniter.org.cn/forums/thread-15444-1-1.html

读CI的使用手册的话,关于如何有效删除URL中index.php以使URL看起来更友好美观的问题,可能是你面对的第一个较为复杂的问题!本贴不是原创,而是一个各种意见的综合!但本帖提出的解决方案可以有效解决Apache和IIS两种环境下的配置问题,同时也可以有效,避免部分虚拟LINUX虚拟主机上可能出现的no input file specified错误!如果你还在为index.php的问题而苦苦寻觅解决方案,或许这里会是你的最后一站!

官方解决方案

默认情况下,index.php 文件将被包含在你的 URL 中:
example.com/index.php/news/article/my_article
你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:

HTML复制代码
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

复制代码

注意:如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.*)$ index.php/$1 [L]
在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。

我的终极解决方案但在实践中,以上方案仅适用于与运行于Apache环境下的服务器且并不具有充分的普遍适用性!当CI程序位于非根目录或位于某些虚拟主机上时,以上解决方案会引起”404错误”或”no input file specified”等错误.百度参考过相关问题的解放方案后,找到了一种具有通用性的有效删除URL路径中index.php的方法,代码参考如下:
index位于根目录时,你可以在index.php所在的根目录里新建.htaccess文件并使用以下代码:

HTML复制代码
RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt)
RewriteRule ^(.*)$ /index.php?/$1 [L]

复制代码

当index.php不在根目录时,你可以在index.php所在目录里新建.htaccess文件并使用以下代码:

HTML复制代码
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /path_to_app/index.php?/$1 [L]

复制代码

注意把path_to_app换成你的index.php所在文件的目录.假设你的index.php放在根目录的tool子文件夹下,你可以这样写:

HTML复制代码
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /tool/index.php?/$1 [L]

复制代码

以上方案应该可以解决Apache环境下如何有效删除URL中index.php的问题,如果有其他问题,请评论或留言并留下一个有效的联系方式.我会尝试替您解决并将可能的解决方案及时通知您!
另外,关于IIS环境下如何有效删除URL中的index.php,可以参考这篇文章:
IIS7.5 去除 index.php web.config配置文件参考文章:如何删除url中index-php的终极解决方案


CodeIgnite/CI 去掉 index.php的 配置

A. .htaccess文件必须放在CI的根目录下和index.php文件在同一目录。

(加载后,我出现过问题!css和js不能正常加载!后来才发现需要定义|js|css)

.htaccess 文件的内容如下:

RewriteEngine on

#RewriteCond $1 !^(index\.php|images|robots\.txt)

RewriteCond $1 !^(index\.php|images|js|css|robots\.txt)

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

//CI203为目录,如果ci直接放在根目录。路径就是/index.php/$1 [L]

有朋友对我上面的设置做出了更正。可以参考下。

RewriteEngine on

RewriteBase /ci213new

RewriteCond $1 !^(index\.php|images|js|css|robots\.txt)

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

B.在apache配置上,注意httpd.conf文件里:

1、//开启rewrite

LoadModule rewrite_module modules/mod_rewrite.so

2、//开启 .htaccess

Options FollowSymLinks

AllowOverride All

Order allow,deny

Allow from all

另外,注意几个文件:

application\config\routes.php—这个文件设置初始加载的默认控制器文件(controller)

application\config\config.php—这个文件设置初始配置,但是,自打我去掉index.php后,$config['index_page'] = ‘index.php’;–这个貌似不再起作用了。为空也木事。。。


在config.php配置文件中,将index_page设置为空,可以影响site_url函数

site_url([$uri = ''[, $protocol = NULL]])

参数:
  • $uri (string) -- URI string
  • $protocol (string) -- Protocol, e.g. 'http' or 'https'
返回:

Site URL

返回类型:

string

根据配置文件返回你的站点 URL 。index.php (获取其他你在配置文件中设置的 index_page 参数) 将会包含在你的 URL 中,另外再加上你传给函数的 URI 参数,以及配置文件中设置的 url_suffix 参数。

推荐在任何时候都使用这种方法来生成你的 URL ,这样在你的 URL 变动时你的代码将具有可移植性。

传给函数的 URI 段参数可以是一个字符串,也可以是个数组,下面是字符串的例子:

echo site_url('news/local/123');

上例将返回类似于:http://example.com/index.php/news/local/123

下面是使用数组的例子:

$segments = array('news', 'local', '123');
echo site_url($segments);

该函数是 CI_Config::site_url() 的别名,更多信息请查阅 配置类 文档。

***CodeIgnite/CI 去掉 index.php的 配置的更多相关文章

  1. PHP CodeIgniter(CI)去掉 index.php

    去掉CodeIgniter(CI)默认url中的index.php的步骤: 1.打开apache的配置文件,conf/httpd.conf : LoadModule rewrite_module mo ...

  2. 更改CI框架默认访问路径及去掉index.php

    下面是去掉index.php的操作 PHP CodeIgniter(CI)去掉 index.php - Langjun - 博客园 设置访问的默认路径是在

  3. php CI 实战教程:如何去掉index.php目录

    Windows下自由创建.htaccess文件的N种方法 .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录.站点的访问控制,当然最多的 ...

  4. ci框架url去掉index.php

    去掉index.php: 1.修改配置文件, $config['index_page'] = ' '; 设置空 2.修改Apache,搜索 htaccess  将 AllowOverride None ...

  5. CodeIgniter学习笔记四:CI中的URL相关函数,路由,伪静态,去掉index.php

    一.URL相关函数 1.加载url模块 加载url有两种方式: a.自动加载:在 application/config/autoload.php 中开启 $autoload['helper'] = a ...

  6. CI去掉 URL 中的 index.php

    首先,你要清楚自己的 Web 服务器是 Apache,支持 mod_rewrite 查找httpd.conf中是否开启了mod_rewrite.so 然后,在 CI 根目录下新建立一个配置文件,命名为 ...

  7. ThinkPHP 3.2,配置 'URL_MODEL'=>2。 APP_DEBUG设为false,U函数生成的URL的index.php不能去掉,只有将APP_DEBUG改成true,才能去掉index.php,求解~~

    ThinkPHP 3.2,配置 'URL_MODEL'=>2.APP_DEBUG设为false,U函数生成的URL的index.php不能去掉,只有将APP_DEBUG改成true,才能去掉in ...

  8. lnmp 设置ci pathinfo和去掉index.php

    LNMP上各个版本pathinfo各个版本的设置基本一样: lnmp v1.1上,修改对应虚拟主机的配置文件去掉#include pathinfo.conf前面的#,把try_files $uri = ...

  9. Apache RewriteCond RewriteRule 入门和Laravel去掉index.php

        Ci删除index.php办法: 创建.htaccess 文件放到网站的根目录下,文件中的内容如下: RewriteEngine onRewriteCond %{REQUEST_FILENAM ...

随机推荐

  1. window.form增删改查

    效果展示: 查询: 可以查询姓名:民族:姓名+民族:都是空的查询全部 取值取得是姓名: 删除: 修改: 先选中查询之后修改: 添加: 代码部分: 第一张表: 第二张表:主表,民族代码加名称 natio ...

  2. e.Row.RowType == DataControlRowType.DataRow详解(转)

    代码语句如下: protected void OnRowCreate(object sender, GridViewRowEventArgs e)    {        if (e.Row.RowT ...

  3. [转载]iTOP-4418开发板Ubuntu系统烧写方法分享

    本文转自迅为论坛:http://topeetboard.com 开发平台:iTOP-4418开发板系统:Ubuntu 1. TF卡读写速度测试烧写 Ubuntu 对于 TF 卡的要求比较高,很多老旧的 ...

  4. chattr - 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

    SYNOPSIS(总览) chattr [ -RV ] [ -v version ] [ mode ] files... DESCRIPTION(描述) chattr 修改文件在Linux第二扩展文件 ...

  5. flask中模板日期格式控制和jinja2中模板格式控制

    1.flask的模块语言采用的是jinja2,首先说一下jinja2中的模板格式控制的使用,即模板自定义filters的使用. python的脚本如下(采用的是格式显示日期): 1 from jinj ...

  6. Spring Boot . 2 -- 用Spring Boot 创建一个Java Web 应用

    通过 start.spring.io 创建工程 通过 IDEA 创建工程

  7. 扫黑除恶Team第四次团队作业

    二.博客撰写要求 文章开头给出团队序号,开发的软件名称,仓库地址. 给出完成本次冲刺需要做的事情(Sprint Backlog)及相应说明. 本次冲刺总结. 三.评分规则 注意:本次作业总分61分.发 ...

  8. Linux从入门到适应(三):Ubuntu16.04将python从3.5升级到3.6

    1 将python从默认的python2.7更换为python3.5 : sudo update-alternatives --install /usr/bin/python python /usr/ ...

  9. copy on write

    yl::string CBaseAutopProcessor::AddAuthorizedInfo(const yl::string & strOriginalUrl, const yl::s ...

  10. 笔试算法题(50):简介 - 广度优先 & 深度优先 & 最小生成树算法

    广度优先搜索&深度优先搜索(Breadth First Search & Depth First Search) BFS优缺点: 同一层的所有节点都会加入队列,所以耗用大量空间: 仅能 ...