最近研究CI框架,发现这个框架的路由功能在Nginx下有问题,报404错误,后来在网上查资料,发现需要开启PATH_INFO。在nginx7.16以后貌似就支持PATH_INFO了,只需要在配置文件中开启即可。打开nginx.conf文件,在你的虚拟主机下增加重写规则,代码如下:复制代码 代码如下:server { listen 80; server_name www.ci.com; location / { root d:/www/Codeigniter_2.0.1/; index index.htm
CodeIgniter(CI)是一个流行的PHP框架,以其轻量级和高效的特性受到开发者的欢迎。在Nginx服务器上运行CI应用时,由于Nginx的URL处理方式与Apache不同,可能会遇到路由问题,导致404错误。这个问题通常与PATH_INFO有关,PATH_INFO是PHP用来获取URL中额外路径信息的变量。
在Nginx 7.16及之后的版本,理论上已经内置了对PATH_INFO的支持。然而,为了确保CI框架的路由系统能正常工作,我们仍然需要在Nginx的配置文件中添加特定的重写规则。以下是配置文件`nginx.conf`中的一个示例:
```nginx
server {
listen 80;
server_name www.ci.com;
location / {
root d:/www/Codeigniter_2.0.1/;
index index.html index.htm index.php;
# 重定向根目录请求到index.php
rewrite ^/$ /index.php last;
# 重写所有非index.php、robots.txt、images、js、styles的请求
rewrite ^/(?!index\.php|robots\.txt|images|js|styles)(.*)$ /index.php/$1 last;
}
# 处理.php文件的请求
location ~ \.php(.*)$ {
root D:/www/Codeigniter_2.0.1/;
# 使用fastcgi处理php文件
fastcgi_pass 127.0.0.1:9002;
fastcgi_index index.php;
# 分割PHP文件名和剩余的路径
fastcgi_split_path_info ^(.+\.php)(.*)$;
# 设置PHP脚本的路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 设置PATH_INFO
fastcgi_param PATH_INFO $fastcgi_path_info;
# 设置PATH_TRANSLATED
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
# 包含fastcgi参数设置
include fastcgi_params;
}
}
```
这段配置的主要目标是将所有HTTP请求正确地路由到CI的index.php入口文件,以便框架的路由系统能够解析URL并执行相应的控制器和方法。`fastcgi_pass`指令指定使用本地的FastCGI服务器(这里是监听9002端口的)来处理PHP请求。`fastcgi_split_path_info`用于分离PHP文件名和额外的URL路径部分,这部分信息会被作为PATH_INFO传递给PHP。
对于CI框架的开发者来说,了解如何配置Nginx以支持PATH_INFO至关重要,因为这直接影响到框架的URL路由功能。例如,当访问一个如`/controller/method/param1/param2`的URL时,CI需要PATH_INFO来正确地识别控制器、方法以及参数。
此外,上述配置中的`location`块还包含了对静态资源(如CSS、JavaScript、图片等)的排除,以确保这些文件能够直接被浏览器访问,而不会被误导向到PHP处理器。
如果你在使用CI框架过程中遇到其他问题,如图片上传、CSS和JS引入、错误处理等,可以参考以下相关文章:
1. 在CODEIGNITER中引入外部的JS与CSS
2. CodeIgniter上传图片的完整流程
3. CI框架中的增删改查操作
4. Codeigniter实现智能裁剪图片的方法
5. 使用CodeIgniter的类库进行图片上传
6. 解决CodeIgniter上传图片时的"You did not select a file to upload"错误
7. 解决CodeIgniter上传图片时不能正确识别图片类型的问题
8. 解决CodeIgniter错误"mysql_connect(): No such file or directory"
9. CodeIgniter实现从网站抓取图片并自动下载到文件夹
10. PHP基于CodeIgniter实现图片上传和剪切功能
通过理解这些文章中的解决方案,可以更好地解决在使用CodeIgniter框架时可能遇到的各种问题。