Laravel项目部署服务器后POST路由不支持、CSRF Token失效问题求助
问题排查与解决方案
第一步:检查会话存储目录权限
你当前使用file作为会话驱动,服务器上storage/framework/sessions目录需要授予Web服务运行用户(常见为www-data)读写权限,执行以下命令修复:
chmod -R 755 storage/framework/sessions chown -R www-data:www-data storage/framework/sessions
本地环境权限要求宽松不会触发该问题,服务器权限限制会导致会话无法写入,每次请求生成新会话,直接引发CSRF Token校验失败。
第二步:修正HTTPS会话Cookie配置
你config/session.php中默认开启了SESSION_SECURE_COOKIE,该配置要求只有HTTPS请求才会携带会话Cookie:
- 如果你的站点未部署SSL证书、使用HTTP访问,在
.env文件新增配置:SESSION_SECURE_COOKIE=false - 如果你的站点为HTTPS访问,确认
.env中的APP_URL为https开头,且服务器SSL配置完整。
第三步:校验Web服务器重写规则
你的表单使用Laravel方法欺骗,通过POST请求携带_method=PATCH参数模拟PATCH请求,需确认Web服务器配置正确:
- Nginx站点配置中需包含以下规则,确保所有请求都转发至Laravel入口,不丢失POST参数:
location / { try_files $uri $uri/ /index.php?$query_string; }
- Apache需确认开启
mod_rewrite模块,项目根目录的.htaccess文件正常生效。
如果参数丢失,Laravel无法识别方法欺骗,就会把请求判定为普通POST请求,触发「路由不支持POST方法」的报错。
第四步:清理服务端缓存
部署到生产环境后执行以下命令清除旧配置、路由缓存,确保修改的配置生效:
php artisan config:clear php artisan route:clear php artisan cache:clear
清理后删除浏览器本地Cookie再重试,避免旧的无效会话Cookie干扰校验。
第五步:修正SESSION_DOMAIN配置
你当前.env中SESSION_DOMAIN填写的{.mydomain.com}需要去掉大括号,正确写法为.mydomain.com;如果使用IP地址访问站点,直接删除该配置项留空即可。
内容的提问来源于stack exchange,提问作者Hassan Elshazly Eida
相关产品推荐
相关产品推荐

