NGINX配置问题:将/api下所有请求路由至api/index.php
问题分析与解决方案
你的Nginx配置里的核心问题是**try_files指令的最终跳转路径错误**,导致非直接访问api/index.php的请求找不到正确的文件。我来帮你修正并解释清楚:
1. 修正路由配置
把现有的location /api块改成下面这样:
location /api { root /usr/share/nginx/php/; index index.php index.html index.htm; # 修改最后一个跳转路径为/api/index.php,确保指向正确的文件 try_files $uri $uri/ /api/index.php?$query_string; }
为什么要改?
你原来的try_files最后写的是/index.php,这会让Nginx去/usr/share/nginx/php/index.php找文件,但你实际要路由的是api目录下的index.php(也就是/usr/share/nginx/php/api/index.php)。改成/api/index.php后,Nginx会根据root路径拼接出正确的文件位置。
2. 确保PHP脚本能被正确解析
光路由过去还不够,你需要在Nginx的server块里添加PHP处理的配置,让Nginx把.php请求转发给PHP-FPM执行:
location ~ \.php$ { root /usr/share/nginx/php/; # 根据你的PHP版本调整套接字路径,比如php8.1-fpm的话是/php8.1-fpm.sock fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; # 关键:确保脚本路径正确,$document_root就是上面的root路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
3. 最后检查与测试
- 确认
/usr/share/nginx/php/api/index.php文件存在,并且Nginx进程(通常是www-data用户)有读取权限。 - 用命令检查Nginx配置语法是否正确:
sudo nginx -t - 如果语法没问题,重启Nginx生效:
sudo nginx -s reload
现在测试mycomain.ext/api、mycomain.ext/api/user等路径,应该都会路由到api/index.php,你可以在PHP脚本里用$_SERVER['REQUEST_URI']来获取完整的请求路径,进而实现URL解析逻辑。
内容的提问来源于stack exchange,提问作者GRX
相关产品推荐
相关产品推荐

