php内置服务器返回404的根本原因是其无url重写能力,仅响应真实存在的.php文件;解决方法是使用router.php脚本,对静态资源匹配后return false,其余请求include index.php。

PHP内置服务器不处理前端路由,直接返回404
用 php -S 启动本地服务时,访问 /dashboard 或 /profile/123 这类前端路由,浏览器会报 404 —— 不是因为 PHP 文件缺失,而是 PHP 内置服务器默认只响应真实存在的 .php 文件,对纯路径(无后缀、无对应物理文件)直接拒收。
根本原因:它不是 Web 服务器,只是个简易 CLI 工具,没有 URL 重写能力。
- 必须显式提供
router.php,且其中return false是关键,不是exit或die - 匹配逻辑要覆盖所有静态资源后缀:
png、js、css、webp、woff2等,漏一个就可能触发 404 -
include __DIR__ . '/index.php'中的index.php必须是你的单页入口(如 Vue 的index.html不能直接 include,得靠file_get_contents()或输出 HTML 字符串)
PhpStorm默认内置服务器(63342端口)无法代理前端路由请求
点击 PhpStorm 的 ▶️ 运行按钮,默认走的是 JetBrains 自带的静态文件服务器(localhost:63342),它压根不执行 PHP,也不支持 router.php。此时哪怕你项目里有完整路由逻辑,只要表单提交或 window.location.href 跳转到非 PHP 路径,就会 404。
这不是代码问题,是运行环境错配。
- 别在 PhpStorm 设置里找“启用路由转发”选项——它根本没有
- 必须手动切换为外部服务:关闭内置服务,改用
php -S或 Apache/Nginx - 如果坚持用 PhpStorm 启动,需在
Run → Edit Configurations中把 “Use PHP Built-in Web Server” 改为 “Use custom web server configuration”,并填入http://localhost:8000这类真实地址
Nginx/Apache 配置 missing try_files 导致 SPA 路由 404
在 Nginx 中,即使 PHP-FPM 正常工作,访问 /settings 仍 404,大概率是 location / 块没加 try_files $uri $uri/ /index.php?$query_string;。Apache 同理,.htaccess 缺少 RewriteRule ^(.*)$ index.php [QSA,L]。
本质是 Web 服务器没把“找不到文件”的请求兜底给 index.php,而是直接放弃。
- Nginx 的
try_files必须放在location /下,不能只放在location ~ .php$里 - Apache 的
RewriteCond %{REQUEST_FILENAME} !-f和!-d必须同时存在,否则静态文件也会被错误重写 - 修改配置后必须
nginx -t && nginx -s reload或重启 Apache,仅重载不生效
PhpStorm Deployment 配置了但 still 404?检查 Web server root URL 和 Local path 是否真正一致
很多人按教程填了 http://localhost 和 C:
mpphtdocsmyapp,结果还是 404。问题往往出在路径映射断裂:比如项目实际在 D:projectsmyapp,但 Deployment 里填的是 C:
mpphtdocs,导致 PhpStorm 认为“该 URL 对应的文件根本不存在”,于是拒绝跳转或提交。
这个映射不是可选优化项,是 PhpStorm 判断“当前文件能否被 Web 服务器访问”的唯一依据。
-
Local path必须精确到项目根目录(含index.php或public/子目录),不能多一级也不能少一级 -
Web server root URL必须与你实际启动的服务器监听地址完全一致,比如用了php -S localhost:8080,这里就得填http://localhost:8080,填http://localhost就失效 - Windows 路径中的反斜杠
在 PhpStorm 配置里会被误解析,一律用正斜杠/或双反斜杠\
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











