Laravel Forge+Linode环境下POST请求被重定向至首页问题
问题解决思路与步骤
1. 修复Nginx尾斜杠重定向问题
从日志能看到,带尾斜杠的POST /api/import/app/orders/返回了301,这是Nginx默认行为导致的:它会自动处理尾斜杠引发重定向,而POST请求经过301跳转后会被转为GET,这是核心问题之一。
修改Laravel Forge中的站点Nginx配置:
- 找到
location /块,添加merge_slashes off;关闭自动合并斜杠规则 - 将默认的
try_files $uri $uri/ /index.php?$query_string;改为try_files $uri /index.php?$query_string;,删除$uri/以避免触发无尾斜杠到带尾斜杠的重定向
修改后的location /配置示例:
location / { merge_slashes off; try_files $uri /index.php?$query_string; }
2. 检查Laravel路由与中间件
- 确认POST接口定义在
routes/api.php中,示例代码:
Route::post('/import/app/orders', [ImportController::class, 'handleOrdersImport']);
不要将API路由写到web.php中,避免受Web中间件干扰。
- 排查API路由组是否被误加了重定向类中间件,比如
RedirectIfAuthenticated,这类中间件可能将未认证请求跳转到首页。 - 确认
app/Http/Middleware/VerifyCsrfToken.php的$except数组包含/api/*,API接口无需CSRF验证,未排除会导致验证失败触发重定向:
protected $except = [ '/api/*', ];
3. 核对HTTPS强制跳转规则
如果站点配置了强制HTTPS,确保跳转规则不会修改请求方法,正确配置如下:
server { listen 80; server_name app.mydomain.com; return 301 https://$server_name$request_uri; }
避免使用rewrite规则实现跳转,易引发请求方法异常。
4. 清除Laravel缓存
部署后缓存可能导致路由不生效,执行以下命令清除缓存:
php artisan route:clear php artisan config:clear php artisan cache:clear
验证测试
修改配置后重启Nginx:
sudo service nginx restart
使用Postman测试https://app.mydomain.com/api/import/app/orders(不带尾斜杠)的POST请求,确认不再重定向到首页。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

