环境:Linux+Nginx+Codeigniter4(默认的Request_URI模式)
需求:
- Vue生成的纯静态项目,在/var/www/front目录中,通过http://IP地址 访问
- Codeigniter4编写的api接口项目,在/var/www/api目录中,通过http://IP地址/api/controller/method 访问
- 路径隐藏ci4框架的index.php入口文件
部署时遇到的问题:
- 可以访问到php文件,并且可执行,但是CI4框架报404 Page Not Found Error 错误。
正确的Nginx的配置:
location /api {
alias /var/www/api/public;
try_files $uri $uri/ @api;
location ~ \.php$ {
include fastcgi.conf;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
location @api {
rewrite /api/(.*)$ /api/index.php?/$1 last;
}
location / {
root /var/www/front;
index index.html;
}
请求/api路径时,找不到对应文件名的文件及目录,则会匹配到@api中。在该规则块中,会对请求路径进行重写,补充URL中没有index.php入口文件路径以及后续参数。重写路径后,再回到/api块中,继续匹配php的解析规则。
使用$request_filename覆盖fasecgi.conf中的script_filename默认配置。默认为$document_root$fastcgi_script_name。两者的区别很多文章都有介绍,不再重复。
fastcgi_pass根据不同的配置,此处路径不同机器路径不通,使用的时候酌情修改。