
php 内置服务器默认以当前工作目录为文档根目录,若未在目标文件所在目录启动,则无法通过 url 正确映射到物理路径,导致“404 no such file or directory”错误。
php 内置服务器默认以当前工作目录为文档根目录,若未在目标文件所在目录启动,则无法通过 url 正确映射到物理路径,导致“404 no such file or directory”错误。
当你在 Windows 命令行中执行 php -S localhost:4000 时,PHP 启动的内置开发服务器不会自动识别或切换到你的项目路径(如 C:\Users\Spencer\www\),而是将当前终端所在的目录作为 Web 根目录(document root)。因此,即使 site.php 真实存在于 C:\Users\Spencer\www\site.php,当你在其他目录(例如 C:\Windows\System32 或 C:\Users\Spencer 根下)运行命令,服务器仍会尝试在当前目录下查找 ./www/site.php —— 这显然不存在,从而返回 404。
✅ 正确做法是:先切换到项目根目录(即包含 site.php 的父目录),再启动服务器:
cd C:\Users\Spencer\www php -S localhost:4000
此时,访问 http://localhost:4000/site.php 即可正常加载(注意:URL 中无需重复 /www/,因为 www 目录本身已成为 Web 根目录)。
⚠️ 补充说明与注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 若你希望保留
/www/作为 URL 路径前缀(例如强制访问/www/site.php),需配合路由器脚本(router.php)手动处理路径映射,例如:// router.php if (preg_match('/^\/www\//', $_SERVER['REQUEST_URI'])) { $file = __DIR__ . $_SERVER['REQUEST_URI']; if (is_file($file)) { return false; // 让服务器直接提供静态文件 } } // 其他路由逻辑...然后启动时指定:
php -S localhost:4000 router.php - 不要依赖环境变量(如
%USERPROFILE%)或绝对路径在命令中隐式生效;PHP 内置服务器不解析路径别名,仅基于当前工作目录解析相对 URI。 - 每次启动前建议用
cd /d "C:\your\project\path"显式切换,避免因终端默认路径不一致引发问题。
总结:PHP 内置服务器的路径匹配是相对于启动时的工作目录,而非文件系统绝对路径或用户主目录。养成 cd 到项目根再启动的习惯,是避免此类 404 的最简单、最可靠方案。



















