PHP内置服务器下.htaccess路由配置异常问题求助
解决PHP内置服务器下真实目录路径跳过自定义路由的问题
问题原因
PHP内置服务器(php -S)的默认行为是:如果请求的路径对应真实存在的文件或目录,会直接尝试访问该资源,而不会将请求转发到index.php执行自定义路由逻辑。当你访问localhost/views时,因为views目录真实存在,服务器会直接处理这个目录请求;若访问localhost/views/department,服务器会尝试查找该子目录/文件,找不到就返回PHP默认的“Not Found”,完全跳过了你的路由代码。
解决方案
1. 启动服务器时指定路由入口脚本
启动内置服务器时,明确将index.php设置为所有请求的处理入口,替换原来的启动命令:
php -S localhost:80 index.php
此命令会强制所有请求(无论路径是否对应真实资源)都先经过index.php的路由逻辑,你的自定义404页面就能正常接管这类请求。
2. 确保.htaccess规则正确(用于Apache生产环境)
如果后续要部署到Apache服务器,需要配置.htaccess将所有请求转发到index.php,规则如下:
RewriteEngine On # 排除真实存在的文件和目录(可选,若你想让真实文件仍能直接访问) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # 将所有请求转发到index.php RewriteRule ^(.*)$ index.php [QSA,L]
注意:PHP内置服务器不支持解析.htaccess,所以此配置仅适用于正式部署环境,本地开发还是依赖步骤1的启动命令。
3. 验证效果
重新启动服务器后,访问localhost/views、localhost/views/department等路径,此时请求会进入你的路由逻辑,自定义404页面即可正常显示。
内容的提问来源于stack exchange,提问作者Mohammad Masood Alam
相关产品推荐
相关产品推荐

