爱程序网

CodeIgniter框架中关于URL(index.php)的那些事

来源: 阅读:

最近,在做自己的个人网站时,采用了轻量级的php框架CodeIgniter。乍一看上去,代码清晰简洁,MVC模型非常容易维护。开发时我采用的工具是Netbeans IDE 8.0,当然,本文的内容和开发工具是没有关系的,和我们最后网站采用的服务器有很大的关系。目前最为常用的两款免费web服务器是Apache和Nginx(这两款服务器的比较,可以参考一篇网上的经典文章:http://zyan.cc/nginx_php_v6/)。在我网站开发与上线的过程中,刚好两个服务器都用到了,他们配置CodeIgniter时稍有区别,接下来分别阐述一下,也为了让其他开发者在使用CodeIgniter框架时少踩坑。

 

(1)关于CodeIgniter

CodeIgniter是一款开源的超轻量级MVC框架,常用于快速地Web开发中,如果你愿意,甚至可以随意地更改其中的源代码,以适应自己的需求。这个框架本身不想多做介绍,需要熟悉的朋友可以去CodeIgniter官方网站下载,并且官网也提供了非常详细的中文帮助手册,可以很好的帮助新人学习。帮助手册链接: http://codeigniter.org.cn/user_guide/toc.html 。帮助手册中从0开始教你搭建一个简单的网站。

 

(2)CodeIgniter架设的网站URL

最开始CodeIgniter搭建的网站URL是这样子的:

http://[网站网址]/index.php/[controller class name]/[class function name]/[function parameter]

举个例子说明:http://127.0.0.1/index.php/welcome/hello/zhangsan。这个例子中,假设了网站的网址是127.0.0.1,也就是我们常用的本机地址,采用controller文件夹中的welcome.php这个用php编写的类处理这个url请求,具体处理方法是调用这个welcome类里面的hello函数,这个函数是需要一个参数的,我们传进去的参数是字符串zhangsan。不过有一点比较碍眼,就是url里面包含了一个固定的字段index.php,看着很不爽。我想要的结果是这样的:http://127.0.0.1/welcome/hello/zhangsan。那么如何把index.php去掉呢?这就是我想主要分享的地方。

 

在讲如何去掉index.php之前,我们先弄清楚它为什么会出现在这里。对于任意一个url请求,CodeIgniter都是先由位于网站跟目录下的index.php文件处理的,这个文件再根据你提供的url中index.php后面的部分来确定把这个请求重新交给哪一个类的哪一个函数处理。因此,url中必须包含index.php这个字段,显式的告诉服务器,这个url你先让index.php去重新定向到我后面指定的类去处理。如果不经过任何配置就直接把index.php去掉,你的网页是显示不出来的。那么我们如果要去掉它,就是希望经过一些配置选项,让服务器见到一个url默认地就用index.php去处理就好了,不用再把index.php显示在url里面。

 

(3)Apache服务器下去掉index.php

我在自己电脑上开发时使用的是Apache服务器,因此不可避免地要先在Apache服务器下解决这个问题。其实,文章开始时提到的CodeIgniter官方帮助手册里面已经给了Apache下的解决办法,却没有给出Nginx下的解决办法。没办法,Apache服务器据说市场占有率已经超过60%,作为如此主流的服务器,官方手册还是有必要说明它的配置方法的。为了更加清晰一些,我再更加详细地说明一下。

 

在网站根目录下(也就是与前文提到的index.php同一个目录下),新建一个文件,名为.htaccess。注意不要忘了htaccess前面还有个点。用记事本打开这个文件,写入如下命令:

RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteCond $1 !^(index.php|images|js|css|robots.txt)RewriteRule ^(.*)$ /index.php/$1 [L]

相关文章列表: