404错误由Web服务器触发而非PHP本身,需检查URL路径与文件实际位置是否匹配、Web服务器配置(如DocumentRoot、PHP解析模块)、.htaccess重写规则及文件权限。

确认请求的 URL 路径是否匹配服务器实际文件位置
PHP 本身不直接返回 404,真正触发 404 的是 Web 服务器(如 Apache 或 Nginx)——它找不到对应路径的文件或未配置好路由。先检查浏览器地址栏里的 URL,比如访问的是 http://localhost/user/profile.php,就要确认项目根目录下是否存在 user/profile.php 这个文件,路径大小写、斜杠方向、扩展名都不能出错。
- Linux 服务器区分大小写:
Profile.php≠profile.php - Apache 默认不解析
.php文件时,可能返回 404 而非 500,需检查httpd.conf或.htaccess中是否有AddType application/x-httpd-php .php - Nginx 需确保
location ~ \.php$块存在且fastcgi_pass指向正确的 PHP-FPM 地址
检查 Web 服务器的文档根目录(DocumentRoot)设置是否正确
很多本地开发环境(如 XAMPP、WAMP、MAMP)默认把站点放在 htdocs 或 www 目录,但你可能把 PHP 文件放到了桌面或其它位置。Apache 的 DocumentRoot 和 必须指向你实际存放 PHP 文件的父目录。
DocumentRoot "/Applications/MAMP/htdocs"Options Indexes FollowSymLinks AllowOverride All Require all granted
如果改过这个路径,记得重启 Apache;Nginx 则检查 root 指令,例如 root /var/www/myapp;,确保该路径真实存在且有读取权限。
排除 .htaccess 重写规则导致的伪 404
如果你用了 Laravel、WordPress 或自定义 URL 重写,.htaccess 中的 RewriteRule 可能误将合法请求导向不存在的路径,而服务器最终因找不到目标文件返回 404。临时重命名 .htaccess 为 .htaccess.bak,再刷新页面:如果 404 消失,说明问题出在重写逻辑。
立即学习“PHP免费学习笔记(深入)”;
- 常见错误:
RewriteBase /subdir/写成/,但项目实际部署在子目录 - 遗漏
RewriteCond %{REQUEST_FILENAME} !-f和!-d,导致静态资源(如style.css)也被重写 - Apache 启用了
mod_rewrite但未允许AllowOverride All,导致规则不生效,看似“没重写”,实则因配置失效引发路径错乱
验证 PHP 是否真的被服务器执行而非当作纯文本下载
如果访问 info.php 页面只看到源码(即浏览器下载或显示 ),说明 PHP 解析模块未启用或 MIME 类型未注册,此时服务器无法执行脚本,也就不会进入 PHP 层级的错误处理,直接按“文件不存在”对待,返回 404(尤其在某些 Nginx + PHP-FPM 配置缺失时)。
- Apache:检查
LoadModule php_module modules/libphp.so和AddHandler php-script .php是否启用 - Nginx:确认
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;中的$document_root不为空,且$fastcgi_script_name匹配真实路径 - 用
curl -I http://localhost/info.php查看响应头,若含Content-Type: text/html且状态码是 200,说明 PHP 已执行;若是text/plain或 404,则解析链断裂
路径、权限、配置三者只要一个没对上,404 就会悄无声息地出现——它看起来是“页面丢了”,其实往往是“路标指错了”。











