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

Laravel应用本地运行正常,AWS EBS(Nginx)报GET方法不支持错误

问题

本地使用php artisan serve运行Laravel应用完全正常,但部署到AWS Elastic Beanstalk搭配Nginx的生产服务器后,提交表单时抛出错误:The GET method is not supported for route : Supported methods: POST。

相关代码如下:

视图代码

<form action="{{ route('sign-up.company.store') }}" method="POST">@csrf

路由定义

Route::post('company/signup/store',[RegistrationController::class, 'signUpCompanyStore'])->name('sign-up.company.store');

控制器方法代码

// 出于安全考虑已移除部分代码
public function signUpCompanyStore(Request $request){
        $request->validate([
            'first_name'           => ['required','max:60'],
            'last_name'            => ['required','max:60'],
            'email'                => ['required','email','unique:users,email']]);
        $role = CompanyRole::where('name', 'Company')->first();
        // 新用户注册
        $company_name = $request->first_name.$number;
        $noWhiteSpaceString = str_replace(' ', '',$company_name);
        $smailletter = Str::lower($noWhiteSpaceString);
        $address = UserAddress::where('user_id',1)->first();

        $data = User::create([
            'role_id'         => 0,
            'password'        => Hash::make($request->password),
            'email_verified_at'=> $address->is_verified == 2 ? now() : null,
            'status'=>1
        ]);
        Mail::to($data->email)->send( new SendEmailVerification($data));
        $package = Package::where('slug','free')->first();
        $order = CompanyOrder::create([
            'order_id'     => id_generate(1,8),
            'status'       => 1,
        ]);

        Invoice::create([
            'user_id'      => $order->user_id,
            'status'       => $order->status,
        ]);

        if ($address->is_verified == 1) {
            if ($address->cron_job_mail == 1) {
                dispatch(new SendEmailVerificationJob($data))->delay(now()->addSeconds(5));
            } else {
                $email = new SendEmailVerification($data);
                Mail::to($data->email)->send($email);
            }
        }
        Auth::login($data,true);
        return redirect()->route('login')->with('success','Registration Successfuly !');
  }

解决办法

1. 修正Nginx URL重写配置

AWS Elastic Beanstalk默认Nginx配置可能未正确处理Laravel的URL重写,导致POST请求被转成GET。需确保Nginx配置包含以下规则:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

在Elastic Beanstalk中,可通过创建.platform/nginx/conf.d/laravel.conf文件添加该配置,部署时会自动生效。

2. 清除并重建路由缓存

生产环境Laravel会缓存路由,若部署后未更新缓存,可能导致路由匹配异常。执行以下命令:

php artisan route:clear
php artisan route:cache

可在Elastic Beanstalk的部署脚本或容器命令中自动执行这些操作。

3. 检查表单实际请求方法

用浏览器开发者工具(F12)查看网络请求,确认表单提交时确实发送POST请求。若被重定向为GET,可能是HTTPS跳转配置问题,需确保Elastic Beanstalk负载均衡器或Nginx在HTTP转HTTPS时保留请求方法。

4. 验证路由URL匹配一致性

确认生产环境中route('sign-up.company.store')生成的URL与路由定义的company/signup/store完全一致,Nginx默认区分URL大小写,大小写不匹配会导致路由无法命中。

5. 排查CSRF令牌问题

虽然表单已添加@csrf,但生产环境会话配置异常可能导致CSRF验证失败,Laravel会自动重定向请求为GET。查看storage/logs/laravel.log日志,若有CSRF相关错误,需确保会话驱动配置正确(多服务器环境下避免使用文件驱动,改用Redis或数据库驱动)。

内容的提问来源于stack exchange,提问作者Milon Hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:01:26