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

自定义404页面遇不存在PHP文件显示“File not found”未跳转

解决PHP文件404不跳转自定义页面的问题

这个问题我碰到过好多次啦,核心原因是PHP文件的请求处理逻辑和静态文件不一样:当你请求一个不存在的静态文件(比如.html、图片),Apache会直接触发自己的ErrorDocument规则;但如果是.php文件,要是你的服务器用了FastCGI(比如php-fpm)来处理PHP,Apache会先把请求交给PHP处理器,而PHP处理器发现文件不存在时,会直接返回它自己的"File not found."错误,根本不给Apache触发自定义404的机会。

给你两个靠谱的解决方案,按优先级来:

方案一:用RewriteRule拦截不存在的PHP文件(无需服务器权限,适合虚拟主机)

修改你的.htaccess文件,在原有配置基础上添加Rewrite规则,主动拦截不存在的PHP请求并转到自定义404页面,同时保留正确的404状态码:

RewriteEngine On

# 拦截所有不存在的PHP文件请求
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.php$ [NC]
RewriteRule ^ /404.php [L,R=404]

# 原有404配置保留
ErrorDocument 404 /404.php

规则解释:

  • RewriteCond %{REQUEST_FILENAME} !-f:检查请求的文件是否不存在
  • RewriteCond %{REQUEST_URI} \.php$ [NC]:匹配所有以.php结尾的请求(忽略大小写)
  • RewriteRule ^ /404.php [L,R=404]:把请求重定向到你的自定义404页面,L表示这是最后一条规则,R=404表示返回404状态码(很重要,不能丢,否则搜索引擎会认为这是正常页面)

方案二:修改PHP-FPM配置(需要服务器管理权限)

如果你的服务器是自己管理的,可以直接修改php-fpm的配置文件(比如www.conf,路径通常在/etc/php/{版本号}/fpm/pool.d/),添加一行:

php_admin_value[error_page] = /404.php

修改后重启php-fpm服务,这样PHP处理器就会用你的自定义页面替代默认的"File not found."错误。

额外提醒:

检查你的404.php里的状态码设置,推荐用更标准的HTTP/1.1协议:

<?php
header("HTTP/1.1 404 Not Found");
// 你的页面内容
echo "Custom 404!";
?>

测试一下访问一个不存在的.php文件,应该就能看到你的自定义404内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:07