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

Ubuntu虚拟主机部署Laravel出现csrf_token mismatch错误如何解决

问题原因
  • Session/Cookie域名不匹配:Laravel的session绑定请求域名,本地用127.0.0.1运行时配置自动适配,部署后使用test.local域名访问时,.env或config/session.php中的SESSION_DOMAIN参数如果没有配置为对应域名,会导致CSRF校验依赖的session cookie无法正常读取,出现mismatch错误。
  • 存储目录权限不足:Ubuntu环境下Laravel的storage、bootstrap/cache目录没有给web服务器用户赋予写入权限,session数据无法正常落盘,每次请求都会生成新的CSRF token,和表单提交的旧token校验失败。
  • Apache重写模块未开启:虽然虚拟主机配置里已经设置了AllowOverride All,但如果apache的mod_rewrite模块没有启用,Laravel自带的public/.htaccess规则无法生效,会导致请求头中的cookie传递异常,影响CSRF校验。
  • 协议配置不一致:如果后续配置了HTTPS但未调整SESSION_SECURE_COOKIE参数,或者存在反向代理导致Laravel识别的请求协议和实际协议不一致,也会出现cookie无法写入的问题。
解决步骤
  • 调整域名相关配置
    打开项目根目录的.env文件,修改或新增以下配置:
APP_URL=http://test.local
SESSION_DOMAIN=test.local
# 如果你使用了Laravel Sanctum,还需要新增下面这行
SANCTUM_STATEFUL_DOMAINS=test.local

修改完成后执行命令清除配置缓存:
php artisan config:clear

  • 修正目录权限
    在项目根目录执行以下命令,给web运行用户(默认是www-data)赋予对应目录的读写权限:
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
  • 开启Apache重写模块
    执行命令开启mod_rewrite后重启Apache服务:
sudo a2enmod rewrite
sudo systemctl restart apache2
  • 清除项目所有缓存
    依次执行以下命令清理旧的缓存、session数据:
php artisan cache:clear
php artisan route:clear
php artisan view:clear
php artisan session:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:27:04