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

PHP REST API使用路径式URL时出现404错误,求解决方案

问题原因与解决办法

核心问题

你访问http://example.com/jpa/api/src/index.php/arquetipo/list时,服务器会默认把index.php/arquetipo/list当成文件路径——以为你要找src/index.php文件夹下的arquetipo/list文件,可这个文件根本不存在,所以直接返回404,你的PHP代码连执行的机会都没有。浏览器打印的URI数组可能是缓存或者特殊场景的结果,实际请求没走到你的逻辑里。

关键解决步骤:配置URL重写

在jpa/api/src目录下新建.htaccess文件,添加以下规则,让服务器把index.php后面的路径转发给PHP入口文件处理:

RewriteEngine On
# 仅当请求的不是真实文件/目录时生效
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 把index.php后的路径转发给index.php处理
RewriteRule ^index.php/(.*)$ index.php?path=$1 [L,QSA]

如果你的API所有请求都要通过index.php处理,也可以用更简洁的规则:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

额外要注意的点

  • Apache服务器设置:得确保Apache开了mod_rewrite模块,同时在网站的虚拟主机配置或httpd.conf里,给src目录设置AllowOverride All,否则.htaccess不会生效:
    <Directory "/你的服务器路径/jpa/api/src">
        AllowOverride All
        Require all granted
    </Directory>
    
  • Nginx服务器的话:不用.htaccess,直接在Nginx的server配置块里加规则:
    location /jpa/api/src/ {
        try_files $uri $uri/ /jpa/api/src/index.php$is_args$args;
    }
    
  • PHP代码防报错:建议给URI数组的索引加个存在判断,避免数组越界导致额外错误:
    if (!isset($uri[$indexRouterParamController]) || $uri[$indexRouterParamController] != 'arquetipo') {
        header("HTTP/1.1 404 Not Found");
        exit();
    }
    

内容的提问来源于stack exchange,提问作者saRca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:40:39