部署PHP应用到Vercel触发文件名冲突错误,如何解决?
问题原因
Vercel的路由匹配机制中,当你配置/api/(.*)转发到/index.php时,会将请求路径的**文件名主体(去掉扩展名部分)**视为路径段进行唯一性校验。api/bootstrap.min.js和api/bootstrap.min.css的文件名主体都是bootstrap.min,因此被判定为路径冲突。
解决方法
以下三种方案任选其一即可:
方案1:调整路由规则,优先匹配静态资源
修改vercel.json,添加优先匹配静态资源的路由规则,让.js、.css等静态文件直接返回,不经过PHP处理。Vercel路由按顺序匹配,所以这条规则要放在原有路由前面:
{ "functions": { "api/*.php": { "runtime": "vercel-php@0.6.0" } }, "routes": [ { "src": "/api/(.*\\.(js|css|png|jpeg|gif|svg))$", "dest": "/api/$1" }, { "src": "/api/(.*)", "dest": "/index.php" } ] }
方案2:修改静态文件命名
给两个文件的主体名加上区分标识,比如将bootstrap.min.js改为bootstrap-js.min.js,bootstrap.min.css改为bootstrap-css.min.css,确保文件名主体唯一。
方案3:重构目录结构
将静态资源从api目录移出,比如放到public/static目录下,请求路径改为/static/bootstrap.min.js和/static/bootstrap.min.css,与api路由完全隔离,从根源避免冲突。
内容的提问来源于stack exchange,提问作者Nancy Moore
相关产品推荐
相关产品推荐

