如何在Vercel部署的Laravel应用中集成Swagger UI?
针对你遇到的Vercel线上环境访问/swagger报404的问题,可按以下步骤排查修复:
调整路由匹配规则
Vercel的路由是从上到下匹配的,当前配置中/swagger/(.*)仅能匹配带子路径的请求(如/swagger/index.html),直接访问/swagger会落到最后一条/(.*)路由指向Laravel入口,导致404。修改.vercel.json的routes部分,新增根路径匹配:"routes": [ { "src": "/(css|js|images)/(.*)", "dest": "public/$1/$2" }, { "src": "/swagger", "dest": "/public/swagger/index.html" }, { "src": "/swagger/(.*)", "dest": "/public/swagger/$1" }, { "src": "/(.*)", "dest": "/api/index.php" } ]确认Swagger UI入口文件与配置
检查public/swagger目录下是否存在index.html,并确保文件内配置的OpenAPI文档地址指向线上可访问路径:将本地的http://localhost:8000/api/documentation替换为https://your-vercel-project.vercel.app/api/documentation,保证Swagger UI能拉取到API定义JSON。修正静态资源构建规则
调整.vercel.json的builds规则,确保静态资源被正确识别:"builds": [ { "src": "/api/index.php", "use": "vercel-php@0.6.0" }, { "src": "public/**/*", "use": "@vercel/static" } ]清除Vercel部署缓存
进入Vercel项目控制台,选择重新部署时勾选「Clear cache and redeploy」,确保新的配置文件和静态资源被完全部署。验证API文档接口可用性
先访问https://your-vercel-project.vercel.app/api/documentation,确认能返回合法的OpenAPI JSON文档。如果该接口也404,需检查Laravel路由在Vercel环境是否正常:可以临时移除APP_ROUTES_CACHE环境变量,避免路由缓存导致的问题,或在部署脚本中添加php artisan route:cache命令重新生成路由缓存。
内容的提问来源于stack exchange,提问作者Joanita

