为何所有请求都指向index.php?PHP内置服务器路由疑问
PHP内置Web服务器的URL自动转发机制解析
问题场景
你的项目结构如下:
project |_src |_public |_index.php
在public目录下启动PHP内置Web服务器:
php -S localhost:8000
此时访问任意不存在的路径(比如http://localhost:8000/random/request/uri),所有请求都会被导向index.php,终端输出如图:
原因与实现逻辑
这是PHP内置Web服务器的默认 fallback 行为,专门用来适配前端控制器模式(大部分PHP框架的核心路由模式)和单页应用路由需求:
- 当内置服务器收到请求时,首先会检查请求的URI是否对应服务器当前工作目录下的真实文件或目录;
- 如果请求路径对应的文件/目录不存在,服务器会自动将请求转发到当前目录下的
index.php(若index.php不存在才会尝试index.html); - 被转发的请求会保留原始的URI信息,你可以在
index.php里通过$_SERVER['REQUEST_URI']获取到用户请求的完整路径,从而实现自定义的路由分发逻辑。
推荐搜索关键词
如果想深入查找相关文档或资料,可以用这些关键词:
- PHP内置Web服务器 路由 fallback
- PHP built-in web server index.php rewrite
- PHP 前端控制器模式 内置服务器
内容的提问来源于stack exchange,提问作者Hải Phạm
相关产品推荐
相关产品推荐

