You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中CORS政策问题:为何带尾斜杠的请求被拦截?

问题原因

这个问题的核心是Laravel的尾斜杠重定向机制和CORS中间件的匹配逻辑共同导致的:

  • 当请求https://example.com/id/(带尾斜杠)时,Laravel默认会触发301重定向到不带尾斜杠的https://example.com/id。
  • 重定向的响应并没有经过你的CORS配置处理,浏览器收到不带CORS头的重定向响应后,就会触发CORS拦截。
  • 而直接请求https://example.com/id时,请求命中对应路由,CORS中间件正常添加响应头,所以不会被拦截。

另外你的CORS配置里paths只包含api/*和sanctum/csrf-cookie,如果/id这类路径不在api前缀下,理论上CORS中间件不会生效,但实际没被拦截可能是因为请求直接命中路由且浏览器的预检请求(OPTIONS)被默认处理了,而带尾斜杠的重定向打破了这个逻辑。

解决办法

提供两种可行的解决方案,按需选择:

方案1:调整CORS配置的paths

修改config/cors.php中的paths数组,把需要匹配的路径(包括带尾斜杠的情况)加入进去,比如:

'paths' => ['api/*', 'sanctum/csrf-cookie', 'id', 'id/', '/*'],

如果需要允许所有路径,直接用'*'更简单:

'paths' => ['*'],

这样不管是带还是不带尾斜杠的请求,都会经过CORS中间件处理,重定向响应也会带上正确的CORS头。

方案2:关闭尾斜杠重定向

在app/Providers/RouteServiceProvider.php的boot方法中,添加一行代码关闭自动重定向:

public function boot()
{
    Route::withoutMiddleware([\Illuminate\Routing\Middleware\RedirectIfTrailingSlash::class]);
    
    // 其他原有代码...
}

这样请求https://example.com/id/不会被重定向,直接由对应的路由处理,CORS中间件就能正常为响应添加头信息,避免拦截。

额外注意事项

  • 确保HandleCors中间件已经添加到全局中间件组中(在app/Http/Kernel.php的$middleware数组里)。
  • 修改配置后需要清除配置缓存:php artisan config:clear

内容的提问来源于stack exchange,提问作者Ombeni Nade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:21:01