PHP 内置服务器 404 错误的根源与正确启动路径解析

4次阅读

PHP 内置服务器 404 错误的根源与正确启动路径解析

php 内置开发服务器(php -s)返回 404 的根本原因,是请求的文件路径未落在当前工作目录下——该命令仅提供静态路由映射,不支持自动目录遍历或项目根目录推断

PHP 自带的内置 Web 服务器(php -S)是一个轻量级、无配置的开发工具,适用于快速测试 PHP 脚本,但它对文件路径极为严格:它只从你执行命令时所在的当前工作目录(current working Directory)中查找并响应请求。这意味着,无论你的项目结构多么复杂(如 laravelpublic/ 入口、Vue 的 dist/ 目录或自定义的 src/),你都必须确保 php -S 命令在实际可访问资源所在的目录中运行。

例如,假设你的项目结构如下:

/project ├── composer.json ├── app/ ├── public/         ← 实际 Web 入口(含 index.php) │   ├── index.php │   └── assets/ └── src/            ← 另一个可能存放脚本的目录     └── demo.php
  • ❌ 错误做法:在 /project 根目录下执行

    cd /project php -S localhost:8888

    此时访问 http://localhost:8888/index.php 会 404 —— 因为 index.php 并不在 /project 下,而是在 /project/public/ 中。

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

  • ✅ 正确做法:切换至 public/ 目录再启动

    cd /project/public php -S localhost:8888

    此时 index.php 位于当前目录,请求可被正常响应。

? 进阶提示:指定路由器脚本(推荐 Laravel 等框架使用) 对于需要 URL 重写(如 Laravel 的 index.php 统一入口)的项目,应配合路由器脚本启动:cd /project/public php -S localhost:8888 router.php其中 router.php 示例(保存在 public/ 下):

⚠️ 常见误区与注意事项

  • 删除旧项目(如 Laravel)后出现 404,往往是因为你习惯性在原项目根目录运行命令,但新项目结构已变(如入口从根目录移到 public/),却未同步调整启动路径;
  • php -S 不读取 .htaccess、nginx.conf 或 php.ini 中的重写规则,一切路由逻辑需由 PHP 脚本显式控制;
  • 浏览器缓存或预加载可能导致“看似相同 URL 却行为异常”,建议测试时使用无痕窗口或清除缓存;
  • windows 用户注意路径分隔符兼容性,但 cd 切换目录逻辑与 unix 一致,重点仍是物理工作目录匹配资源位置

总结:解决 php -S 的 404 问题,核心就一句话——让终端当前路径(pwd / cd 结果)与浏览器所请求的 PHP 文件所在路径完全一致。养成执行前先 ls -l index.php 确认文件存在的习惯,可避免绝大多数路径类 404。

text=ZqhQzanResources