Web服务器404通常因请求未到达入口文件所致,需检查路由重写、index指令配置、root路径指向、.htaccess生效条件、文件权限及SELinux限制。

PHP入口文件找不到404咋办_PHP入口文件404查找修复【操作】  第1张

确认 Web 服务器是否真的在访问你写的入口文件

很多情况下,404 并不是文件丢了,而是请求压根没走到你预期的 PHP 文件上。比如 Nginx 默认不把 / 映射到 index.php,Apache 可能没启用 mod_rewrite 或没读取 .htaccess

  • 检查浏览器地址栏:你访问的是 http://localhost/ 还是 http://localhost/index.php?如果前者 404、后者正常,说明路由重写失败
  • 查看 Web 服务器配置中 index 指令是否包含 index.php(Nginx 的 index index.php index.html;;Apache 的 DirectoryIndex index.php index.html
  • curl -I http://localhost/ 看响应头里的 Server 和状态码,确认是不是 Web 服务器返回的 404,而不是 PHP 报错页面

Nginx 下 Laravel/ThinkPHP 等框架的入口 404

这类框架通常只暴露 public/index.php,但 Nginx 配置若仍指向项目根目录,就会找不到 index.php —— 因为它实际在子目录里。

  • 确保 root 指向的是 public/ 目录,不是项目根目录:
    root /var/www/myapp/public;
  • 确认 location ~ \.php$ 块里有 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;,否则 $fastcgi_script_name 可能带多层路径,导致找不到文件
  • 如果用了 try_files $uri $uri/ /index.php?$query_string;,要保证 /index.php 对应的是 public/index.php,而不是根目录下的空文件

Apache 中 .htaccess 不生效导致 index.php 无法被隐式调用

常见于本地 XAMPP/MAMP 或手动部署,.htaccess 写了重写规则,但 Apache 根本没加载它。

  • 检查 httpd.conf 或虚拟主机配置中,对应目录是否设置了 AllowOverride All(不是 None
  • 确认 mod_rewrite 已启用:a2enmod rewrite(Ubuntu/Debian),或取消 httpd.conf#LoadModule rewrite_module modules/mod_rewrite.so 的注释
  • .htaccess 文件必须放在 Web 可访问的根目录(如 htdocs/public/),且文件名不能是 htaccess.txt 或编码错误

文件权限或 SELinux 导致 PHP 文件存在却报 404

Linux 下即使 ls -l 看到 index.php 存在,Web 服务器用户(如 www-datanginx)也可能无权读取。

立即学习“PHP免费学习笔记(深入)”;

  • 运行 ls -l /path/to/index.php,确认属组和权限允许 Web 用户读取(例如 -rw-r--r-- 或至少 group 可读)
  • 如果是 CentOS/RHEL,检查 SELinux 是否拦截:ausearch -m avc -ts recent | grep nginx 或临时设为宽容模式测试:setenforce 0
  • 注意:某些 Docker 环境中,挂载卷时未加 :z:Z 标签,也会触发 SELinux 权限拒绝
Web 服务器对“文件不存在”的判定非常机械——它只认路径、权限、配置三者同时满足。哪怕 index.php 就在眼前,只要 root 配错一层、AllowOverride 少一个字母、或者 SELinux 多盯了一眼,它就坚定返回 404。