openapi-generator生成的Slim4部署在LAMP子目录报404错误求助
核心问题是openapi-generator生成的Slim4项目的入口、路由加载逻辑和官方骨架不同,之前的配置没有适配生成代码的结构,按以下步骤调整即可:
修正生成路径
首先确认openapi-generator的输出路径和你的站点结构对齐,将生成命令调整为:openapi-generator-cli generate -i petstore.yaml -g php-slim4 -o /var/www/company1.com/app/api/
确保生成的所有代码都在站点子目录/api下。调整basePath配置位置
打开/var/www/company1.com/app/api/index.php,找到Slim实例初始化代码:$app = Slim\Factory\AppFactory::create();紧接着在该行之后、加载路由/中间件之前添加basePath配置:
$app->setBasePath('/api');注意必须放在路由加载逻辑之前,否则配置不会生效。
配置重写规则
不需要额外创建public目录,直接在/var/www/company1.com/app/api/目录下创建.htaccess文件,内容如下:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [QSA,L]再检查站点根目录
/var/www/company1.com/app/下的.htaccess,添加规则避免根目录重写拦截/api路径的请求:RewriteRule ^api/ - [L]验证路由规则
打开生成的routes.php文件,确认路由没有重复的/api前缀:如果openapi定义的接口路径是/pet,生成的路由也为/pet则配置正确;如果生成的路由前缀自带/api,则删掉之前添加的setBasePath配置即可。测试访问
不要直接访问https://company1.com/api,openapi生成的代码默认没有注册根路径/的路由,直接访问会返回404,属于正常现象。使用你openapi定义中存在的接口路径测试即可,比如https://company1.com/api/pet。
内容的提问来源于stack exchange,提问作者eestikul

