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

非存在目录重定向异常(返回200而非404)技术求助

解决PHP文件后追加不存在目录返回200而非404的问题

你遇到的是Apache服务器AcceptPathInfo指令默认开启导致的路径解析异常:当这个指令处于开启状态时,服务器会允许在PHP脚本文件名后追加任意路径片段(比如shooting.php/nonexistfolder),此时服务器会把shooting.php判定为有效脚本并执行,后面的nonexistfolder会被当作PATH_INFO变量传递给脚本。但你的脚本没有处理这种无效路径的情况,所以返回200状态码;同时如果脚本里用了相对路径的include操作,还会因为路径解析错误找不到目标文件。

下面是几种针对性的解决方案:

方案1:通过Apache配置禁用指定文件的路径追加

如果你的站点使用Apache服务器,可以在.htaccess文件(或httpd.conf配置文件)中添加规则,禁止shooting.php接受额外路径信息:

<Files "shooting.php">
    AcceptPathInfo Off
</Files>

如果要让所有PHP文件都禁用这个特性,可以改为全局规则:

AcceptPathInfo Off

配置生效后,再访问shooting.php/nonexistfolder这类路径,服务器会直接返回404。

方案2:在PHP脚本内主动拦截无效路径

如果你无法修改服务器配置,可以在shooting.php的开头添加代码,检查是否存在额外路径信息,一旦检测到就返回404:

// 检查是否有非空的额外路径信息
if (!empty($_SERVER['PATH_INFO']) && trim($_SERVER['PATH_INFO'], '/') !== '') {
    http_response_code(404);
    // 可以包含你的404页面模板,或者直接输出404内容
    include('your-404-page.php');
    exit;
}

这样即使服务器允许追加路径,脚本也会主动拦截并返回正确的404状态。

方案3:用RewriteRule重定向无效请求

通过.htaccess的URL重写规则,直接匹配所有shooting.php后带额外路径的请求,返回404:

RewriteEngine On
# 匹配shooting.php后面的任意路径片段,直接返回404
RewriteRule ^shooting.php/.+$ - [R=404,L]

额外提示:解决包含文件找不到的问题

如果你的脚本里使用了相对路径的include(比如include('includes/header.php')),PATH_INFO会干扰PHP的当前工作路径,导致文件找不到。可以在脚本开头定义绝对路径来避免这个问题:

// 定义站点根目录的绝对路径
define('ROOT_DIR', dirname(__FILE__));
// 使用绝对路径包含文件
include(ROOT_DIR . '/includes/header.php');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:49:06