修改Statamic CMS REST API速率限制遇阻求助
解决Statamic REST API速率限制修改问题
你的核心问题是自定义路由覆盖了Statamic原生API路由,导致请求无法正确转发到Statamic的API控制器,同时触发了不必要的重复速率限制校验。以下是正确的修改步骤:
1. 移除多余的自定义路由
删除routes/web.php中你添加的所有API路由代码——Statamic已经自动注册了自己的API路由,不需要手动覆盖拦截。
2. 修正RouteServiceProvider配置
你的RouteServiceProvider.php逻辑方向正确,可简化后保留核心配置:
<?php namespace App\Providers; use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\Log; class RouteServiceProvider extends ServiceProvider { public function boot() { $this->configureRateLimiting(); parent::boot(); } protected function configureRateLimiting() { Log::channel('single')->info('configureRateLimiting function fired'); RateLimiter::for('api', function (Request $request) { Log::channel('single')->info('rate limit fired'); // 替换为你需要的限制规则,示例:认证用户100次/分钟,游客50次/分钟 return $request->user() ? Limit::perMinute(100)->by($request->user()->id) : Limit::perMinute(50)->by($request->ip()); }); } }
3. 确认Statamic API的默认中间件
Statamic的REST API默认已启用throttle:api中间件(默认限制60次/分钟),只要你修改了api键对应的速率规则,就会自动应用到所有Statamic API端点上。
4. 清除缓存并测试
执行命令清除Laravel缓存,确保配置生效:
php artisan cache:clear php artisan route:clear
之后多次请求Statamic API,观察速率限制是否按你设置的规则生效。
进阶:单独为Statamic API设置速率限制
如果不想修改全局api速率限制,只想针对Statamic API单独配置:
- 在
RouteServiceProvider中新增自定义速率限制键:
RateLimiter::for('statamic-api', function (Request $request) { return $request->user() ? Limit::perMinute(200)->by($request->user()->id) : Limit::perMinute(100)->by($request->ip()); });
- 复制
vendor/statamic/cms/config/api.php到项目config/statamic/api.php目录,修改middleware数组:
'middleware' => [ 'api', 'throttle:statamic-api', // 替换原有的throttle:api \Statamic\Http\Middleware\Api\Authenticate::class, ],
内容的提问来源于stack exchange,提问作者wizzer711
相关产品推荐
相关产品推荐

