Laravel6部署至Apache2后所有POST路由均报419页面过期错误(含CSRF令牌)
Laravel 6 部署到 Apache2 后 POST 路由返回 419 页面过期的排查方案
Apache 配置相关排查
- 检查 Apache 的
mod_rewrite模块是否启用。Laravel 依赖重写规则处理路由,未启用会导致会话或 CSRF 令牌请求处理异常。启用命令:sudo a2enmod rewrite,完成后重启 Apache:sudo systemctl restart apache2。 - 确认站点配置文件中的
AllowOverride设置为All。在虚拟主机配置的<Directory>块内必须开启该选项,否则 Laravel 根目录下的.htaccess规则无法生效,会影响会话 Cookie 的传递逻辑。示例配置:
修改后重启 Apache 使配置生效。<Directory /var/www/your-project/public> AllowOverride All Require all granted </Directory> - 验证 Apache 的
DocumentRoot是否指向 Laravel 项目的public目录,而非项目根目录。错误的根目录会导致静态资源加载、会话处理路径异常,进而触发 CSRF 验证失败。
Laravel 侧额外排查点
- 确认
.env文件中的APP_KEY正确配置。APP_KEY用于加密会话数据,若 staging 环境的密钥与本地不一致,会直接导致会话验证失败。生成密钥命令:php artisan key:generate,生成后确保.env中APP_KEY字段值正确。 - 检查表单是否正确嵌入 CSRF 令牌。确保表单内包含
@csrf指令,或手动添加<input type="hidden" name="_token" value="{{ csrf_token() }}">,并确认页面渲染后该字段值正常显示。 - 验证会话存储驱动配置。若
.env中SESSION_DRIVER为file,需确保storage/framework/sessions目录权限正确(一般设为755,用户组为 Apache 运行用户如www-data);若使用database驱动,需确认会话表已完成迁移(执行php artisan session:table后再运行php artisan migrate)。 - 检查服务器时间与本地是否一致。CSRF 令牌和会话均有有效期,服务器时间与本地偏差过大时,会触发令牌过期判定错误。
其他可能原因
- 服务器端是否开启了缓存或 CDN?若页面缓存拦截了请求,会导致 CSRF 令牌无法实时更新,提交时验证失败。
- 浏览器是否禁用了 Cookie?会话和 CSRF 验证依赖 Cookie 传递数据,禁用 Cookie 会直接触发 419 错误,可更换浏览器或开启 Cookie 后重试。
内容的提问来源于stack exchange,提问作者Nirali Kavar
相关产品推荐
相关产品推荐

