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

Laravel 5.4+VueJS部署后POST请求报405 Method Not Allowed错误求助

解决Laravel 5.4 + VueJS部署后POST请求405 Method Not Allowed的问题

我之前也踩过类似的坑,结合你的代码和描述,给你梳理几个大概率能解决问题的方向,按优先级来排查:

1. 先确认服务器的重写规则是否配置正确

本地运行正常但部署后出问题,大概率是服务器的URL重写没配置好,导致Laravel无法正确处理POST请求:

  • Apache环境:
    • 确保mod_rewrite模块已经开启
    • 把Laravel根目录下的.htaccess文件复制到public目录(或者确认服务器的网站根目录指向了Laravel的public文件夹),标准规则如下:
      <IfModule mod_rewrite.c>
          <IfModule mod_negotiation.c>
              Options -MultiViews -Indexes
          </IfModule>
      
          RewriteEngine On
      
          # Handle Authorization Header
          RewriteCond %{HTTP:Authorization} .
          RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
      
          # Redirect Trailing Slashes If Not A Folder...
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_URI} (.+)/$
          RewriteRule ^ %1 [L,R=301]
      
          # Send Requests To Front Controller...
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteRule ^ index.php [L]
      </IfModule>
      
  • Nginx环境:
    在你的站点配置里添加转发规则,确保所有请求都指向Laravel入口文件:
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    配置完成后记得重启Nginx服务。

2. 检查CORS组件的配置是否真的生效

虽然你说已经安装了CORS组件,但可能配置没到位:

  • 如果你用的是barryvdh/laravel-cors,打开config/cors.php,确认:
    • allowed_methods数组里包含'POST'
    • paths设置了['api/*']来匹配你的API路由
  • 打开浏览器开发者工具(F12)的Network标签,重新发送请求,查看响应头里是否有Access-Control-Allow-Methods: POST, GET, ...字段。如果没有,说明CORS配置未生效,可重新发布配置文件:php artisan vendor:publish --provider="Barryvdh\Cors\ServiceProvider"

3. 确认Vue请求的URL是否正确

本地和服务器的路径差异容易导致这个问题:

  • 你的Vue代码里请求路径是"api/sendbooking",如果服务器上项目不是根域名部署(比如在子目录),或者当前页面路径不是根路径,相对路径会拼接成错误URL。建议改成绝对路径:"/api/sendbooking"(前面加斜杠)
  • 也可以在Vue的HTTP配置里设置全局baseURL,简化后续请求:
    // 若使用vue-resource
    Vue.http.options.root = '/api';
    // 之后请求可简化为 this.$http.post("sendbooking", this.booking)
    
  • 同样在Network标签里查看实际发送的请求URL,确认是否和预期一致。

4. 验证Laravel路由是否正确注册

路由缓存或冲突可能导致POST请求找不到对应路由:

  • 在服务器上运行php artisan route:list,查看输出里是否有POST | api/sendbooking | BookingController@setBooking这条记录
  • 如果看不到,先清除路由缓存:php artisan route:clear,再重新查看
  • 同时确认没有其他路由和这个POST路由冲突(比如同名GET路由、路由参数覆盖等)

5. 排查服务器层面的请求限制

部分服务器的安全插件、WAF或防火墙会拦截POST请求:

  • 可临时关闭服务器的安全插件(比如Apache的mod_security)测试
  • 查看服务器错误日志(Apache的error.log、Nginx的error.log),里面可能有拦截POST请求的相关记录

最后再核对下你的代码

你的Vue请求代码:

this.$http.post("api/sendbooking", this.booking)
  .then(function (response){ console.log(response) })

建议把路径改成"/api/sendbooking"避免相对路径问题;

你的路由代码:

Route::post('/sendbooking',[ 'uses' => 'BookingController@setBooking' ]);

这段代码没问题,因为api.php本身已被Laravel路由组加上/api前缀。

内容的提问来源于stack exchange,提问作者Sandun Isuru Niraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:38:55