PHP本地测试显示404怎么弄_PHP本地404错误修复方式【方法】

12次阅读

本地php显示404的首要原因是Web服务未启动或端口未监听,需用netstat检查80/8000端口;其次可能是PHP内置服务器缺少router.php导致静态资源404;再者是XAMPP/WAMP/MAMP的DocumentRoot配置错误或.htaccess重写规则失效。

PHP本地测试显示404怎么弄_PHP本地404错误修复方式【方法】

apachenginx 没启动或没监听 80/8000 端口

本地跑 PHP 显示 404,第一反应不是代码问题,而是 Web 服务压根没起来。比如用 php -S 启动了内置服务器,但浏览器却访问了 http://localhost/(默认走 Apache/Nginx),自然 404。

检查方式很简单:

  • 运行 netstat -an | grep :80macos/linux)或 netstat -ano | findstr :80windows),看有没有进程在监听
  • 打开浏览器直接访问 http://localhost:8000(如果你用的是 php -S localhost:8000
  • 确认你没同时开着 XAMPP/WAMP/MAMP 又手动启了内置服务器,端口冲突会导致一个静默失败

PHP 内置服务器没指定路由器文件(router.php)导致静态资源 404

php -S 启动时,如果项目里有 css/js 图片等静态文件,不加 router.php,PHP 内置服务器默认只处理 .php 文件,其他一律返回 404。

解决方法是写一个最小化 router.php

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

if (preg_match('/.(?:png|jpg|jpeg|gif|css|js|ico|xml|txt|pdf|woff2|woff|ttf)$/', $_SERVER["REQUEST_URI"])) {     return false; // 让内置服务器直接返回静态文件 } include __DIR__ . '/index.php';

然后这样启动:php -S localhost:8000 router.php

注意点:

  • return false 是关键,不是 exitdie,否则静态文件读不到
  • 路径匹配要覆盖你实际用的后缀,比如用了 .webp 就得加上
  • 如果 index.php 不在当前目录,__DIR__ 要对应调整

DocumentRoot 配置错误(XAMPP/WAMP/MAMP 场景)

用集成环境却访问不到自己写的 PHP 文件,大概率是 DocumentRoot 指向了默认目录(如 C:/xampp/htdocs),而你的项目放在了桌面或其它位置。

改法分两步:

  • 找到对应配置文件:XAMPP 是 apache/conf/httpd.conf,WAMP 是菜单里「Apache → httpd.conf」,MAMP 是应用内「Preferences → Web Server」
  • DocumentRoot,把两个路径都改成你项目所在目录,例如 "D:/myproject"
  • 改完必须重启 Apache,否则不生效;重启后留意控制台有没有报错,比如权限拒绝或路径不存在

常见坑: 路径末尾不能漏掉斜杠,Windows 下路径要用正斜杠 / 或双反斜杠 \,单反斜杠会解析失败。

.htaccess 重写规则干扰或缺失(尤其 laravel / thinkphp 等框架)

框架项目本地 404,十有八九是 URL 重写没开或规则没生效。比如 Laravel 的 public/index.php 能直接访问,但 /users 就 404,说明 rewrite 模块没启用或 .htaccess 被忽略。

Apache 下检查项:

  • 确认 mod_rewrite 已启用:在 httpd.conf 中取消注释 LoadModule rewrite_module modules/mod_rewrite.so
  • 确保对应 块里有 AllowOverride All(不是 None
  • 检查项目根目录(通常是 public/)下是否有有效的 .htaccess 文件,内容是否被意外清空

Nginx 用户则要手动配 try_files,例如 Laravel 的典型配置:

location / {     try_files $uri $uri/ /index.php?$query_string; }

少这一行,所有非 PHP 脚本路径都会 404。

本地 404 表面是路径问题,实际常卡在服务层、路由层、重写层三层之间。最省时间的做法:先 curl 看响应头和状态码,再查 Web 服务日志(Apache 的 Error.log,PHP 内置服务器的终端输出),比瞎改代码快得多。

text=ZqhQzanResources