Laravel+Vue3(Vite)共享虚拟主机部署出现405 Method Not Allowed问题
Laravel+Vue3 部署后API 405 Method Not Allowed 排查方向
检查实际请求细节
打开浏览器开发者工具的Network面板,提交登录表单后查看请求:- 确认请求方法是POST,如果显示GET,大概率是前端请求写错方法,或者请求被服务器重定向(比如301/302跳转后方法会自动转为GET)
- 核对请求URL是否正确,比如API路由默认带的
/api前缀有没有遗漏,确保指向/api/login这类正确的路由地址
验证Laravel路由配置
- 确认
routes/api.php里的登录路由用Route::post()定义,示例:Route::post('/login', [App\Http\Controllers\AuthController::class, 'login']); - 在服务器终端执行
php artisan route:list,查看路由列表中登录路由的HTTP方法是否为POST,是否存在重复定义或路由覆盖的情况 - 注意区分API路由和web路由,API路由默认带
/api前缀,不要混淆
- 确认
排查共享主机服务器配置
- 检查
.htaccess文件(Apache环境):- 如果网站根目录是项目根目录,确保
.htaccess把请求转发到public目录:<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule> - 如果网站根目录是public目录,确认public下的
.htaccess是Laravel默认的重写规则,没有修改导致POST请求被拦截
- 如果网站根目录是项目根目录,确保
- 联系主机商确认是否禁用了POST方法,或者有ModSecurity等安全规则拦截了POST请求
- Nginx环境的话,确认配置文件中有正确的路由转发规则:
location / { try_files $uri $uri/ /index.php?$query_string; }
- 检查
CSRF令牌验证排查
- 如果是API路由,确认是否在
app/Http/Middleware/VerifyCsrfToken.php的$except数组中排除了登录路由:protected $except = [ '/api/login', ]; - 前端如果用axios请求,确认是否自动携带了CSRF令牌(Laravel默认会通过meta标签注入,axios会自动读取)
- 如果是API路由,确认是否在
清除缓存
- 在服务器执行以下命令清除Laravel缓存:
php artisan cache:clear php artisan route:cache php artisan config:cache - 确保前端部署的是最新的Vite打包资源,清除浏览器缓存后重新测试
- 在服务器执行以下命令清除Laravel缓存:
内容的提问来源于stack exchange,提问作者Gourav Khandelwal
相关产品推荐
相关产品推荐

