You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:02:34