在Apache及IIS6.0中codeigniter去掉 URL 中的 index.php

来源:互联网 发布:java如何设置字符集 编辑:程序博客网 时间:2024/05/17 01:02

Apache服务器去掉URL中的index.php

 

apache支持 mod_rewrite,并已配置好 rewrite 相关的参数

1、打开httpd.conf,检查是否加载rewrite_module模块

LoadModule rewrite_module modules/mod_rewrite.so

你可以在cmd中执行命令:D:\php\Apache2\bin>httpd.exe -M (注:httpd.exe的路径根据你自己的apache的安装目录)

如果出现“rewrite_module (shared)”,即表示apache加载mod_rewrite模块成功,如下图所示:

2、将AllowOverride配置成ALL

例如我的网站根目录为d:\php\www目录,如下图所示:


这里插一句:2012-12-27增加

如果采用虚拟主机的方式,请直接在虚拟主机的配置文件中的相关位置增加配置。主文件中的配置不影响。也就是说如果主文件中的AllowOverride为NONE,说明不启用htaccess文件的话,如果在虚拟主机配置文件中对某个虚拟主机开启AllowOverride,这个虚拟主机仍会支持htaccess文件。

htaccess文件

然后,在 CI 根目录(与index.php同级) 下新建立一个配置文件,命名为: .htaccess 在里面这样写: 

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

就可以去掉 index.php 了。要注意 /index.php/$1 要根据你目录(Web 目录,比如 http://www.domain.com/index.php)的实际情况来定,比如网站根目录是 /ci/index.php 则要写成 /ci/index.php/$1,完整代码如下:

RewriteEngine on  RewriteCond $1 !^(index\.php|images|robots\.txt)  RewriteRule ^(.*)$ /ci/index.php/$1 [L]

RewriteCond $1 !^(index\.php|images|robots\.txt)
上面的代码意思是排除某些目录或文件,使得这些目录不会 rewrite 到 index.php 上,这一般用在图片、js、css 等外部资源上。也就是说非 PHP 代码都要排除出去。(这里我排除了 images 目录和 robots.txt 文件,当然 index.php 也应该被排除)

CodeIgniter 中config.php文件配置

将内容:

$config['index_page'] = "index.php";
把其中的 "index.php" 改成 "" 就可以了。如下:

$config['index_page'] = "";

以上配置完成,就可以去掉index.php了。注意:htaccess文件一定要放对位置,起初我放到了application目录下,导致浪费时间不说,还严重怀疑我的apache是否有问题。

相关文献:codeigniter的url重写问题(去掉index.php路由)

下面介绍一下关于htaccess相关内容(持续更新)

RewriteRule ^(.*)$ /框架目录/index.php/$1 [L]

这个文件你看了CI代码里路由转发的话更容易理解,它会将URI后面的部分全部取出(即括号内部分),交给/框架目录/index.php/$1处理,这里$1即括号内部分

2、一个网友对这块内容不明白的人的回答内容

RewriteEngine onRewriteCond $1 !^(index\\.php|captcha|public|js|css|robots\\.txt) RewriteRule ^(.*)$ /zgxb/index.php/$1 [L]
这个是我的CI项目里面的重定向文件,/zgxb/是项目名,上面的|public|是我放css或者js还有img的文件夹,根据项目实际内容稍加修改即可。

3、去掉index.php,一个网友的htaccess文件内容如下:

Options +FollowSymLinksRewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php/$1 [L]

更多内容:

1、apache下.htaccess的功能及写法

2、Apache开启URL重写功能方法

3、通过 Apache 配置 Rewrite 支持 .htaccess,详细讲解mod_rewrite规则

IIS6.0中去掉URL中的index.php

在IIS6.0中需要使用rewrite插件。这个做过伪静的都应该知道。不过,这一个有多个版本,我曾经在“codeignter中国论坛”上下载的一个版本,无法达到效果。不知道作者是如何配置的。由于不行,于是拿出我多年使用的rewrite,进行一番配置,解决了这个问题。下面是配置记要:

1、下载rewrite,这里面已经配置好了。不过也要根据你的网站环境增加一些内容。下面有描述。代码如下:

[ISAPI_Rewrite]RewriteRule /(?:index\.php|images|css|js|upload)/(.*) $0 [I,L]RewriteRule /(.*) /index.php/$1 [I,L]
第一行是要排除的内容。比如上面的排除的内容有index.php文件,images目录,css目录等等。

第二行就是将浏览器的任何内容转到index.php/之后。我们知道,正常情况下,CI的访问都是要加上index.php/控制器/方法/xxx这样的模式的。通过上面的处理就可以实现我们想要的结果了。这里要注意的是第一行和第二行不能互换。第一行必须在第二行之前。就是说碰到了图片,样式等等这样的文件,不做转向处理。不然访问一个图片,本来是http://www.xxx.com/image/aaa.gif就成了http://www.xxx.com/index.php/images/aaa.gif,这样图片就不会访问到了。

简单的说,第一行是过滤,不应用规则的部分,也就是你看完我这篇文章,应用到你自己项目中可能要更改的部分。

第二行,由于我的CI项目就是根目录,所以我在index.php前面加了个/,也可以不加,不加就是表示当前目录。这个也可能会根据需要,决定是加,或不加,或者还要加个目录也说不定,这个没什么要说明的。

2、需要将application目录下的config.php文件中,即下面代码:

$config['index_page'] = 'index.php';
把index.php去掉,改为:

$config['index_page'] = '';

在apache中可以不用改,但是在IIS6.0中必须要改,否则仍无法去掉index.php来访问。

2012-12-29补充:

今天又看了一下“codeigniter手册”,关于site_url()辅助函数的说明中看到以下内容:

Returns your site URL, as specified in your config file. The index.php file (or whatever you have set as your site index_page in your config file) will be added to the URL, as will any URI segments you pass to the function, and the url_suffix as set in your config file.
对于site_url()函数,其index_page值也会添加到URL中,所以建议不管是apache还是iis,对于去掉index.php时,将index_page的值设置为空吧。

好了,你现在可以去掉index.php来访问你的任何页面了。

原创粉丝点击